home *** CD-ROM | disk | FTP | other *** search
/ Team Palmtops 7 / Palmtops_numero07.iso / Ti / Magazine / Tests / NIBBLE89.ZIP / nibble.asm < prev    next >
Encoding:
Assembly Source File  |  1999-02-07  |  28.3 KB  |  1,244 lines

  1. ; Nibble89 v1.1
  2. ; last update: 7/2/99
  3. ; by Alban Gervaise (GefunS@I-France.com)
  4.  
  5.  
  6.         include "doorsos.h"
  7.         include "graphlib.h"
  8.         include "userlib.h"
  9.         include "nibble89.lvl"
  10.         include "nibble89.pic"
  11.  
  12.         xdef _main
  13.         xdef _comment
  14.         xdef _ti89
  15.  
  16.  
  17.  
  18. Take_str MACRO
  19.         move.w \1,d5
  20.         move.w \2,d6
  21.         move.w \3-1,d7
  22.         move.w d7,d4
  23.         bsr take_string
  24.         ENDM
  25.  
  26.  
  27. print_d0 MACRO
  28.         bsr print_value
  29.         move.w  \3,-(a7)
  30.         move.l  a0,-(a7)
  31.         move.w  \2,-(a7)
  32.         move.w  \1,-(a7)
  33.         jsr     doorsos::DrawStrXY
  34.         lea 10(a7),a7
  35.         ENDM
  36.  
  37.  
  38. mask0 equ %11111110  ;(up\2nd\donw...)
  39. mask1 equ %11111101  ;(Enter\clear...)
  40. mask2 equ %11111011  ;( <- )
  41. mask3 equ %11110111  ;(catalog...)
  42. mask4 equ %11101111  ;(Mode...)
  43. mask5 equ %11011111  ;(Home...)
  44. mask6 equ %10111111  ;(ESC...)
  45.  
  46. LONG =  20  ; la longeur du nibble est de 20 pixel
  47.  
  48.         dc.l 'ICON'
  49.         dc.w %1111111111111111
  50.         dc.w %1011110000000001
  51.         dc.w %1000011101001101
  52.         dc.w %1000000000000101
  53.         dc.w %1000000001111101
  54.         dc.w %1000001111000001
  55.         dc.w %1000000000000001
  56.         dc.w %1111111111111111
  57.  
  58. _main:
  59.         move.w #40,x_cur
  60.         clr.b select
  61. menu    bsr pic
  62.         move.w #1,-(a7)
  63.         jsr doorsos::FontSetSys
  64.         lea.l play_str(pc),a4
  65.         moveq #3,d7
  66.         moveq #40,d5
  67. loopp   move.w #4,-(a7)
  68.         move.l a4,-(a7)
  69.         move.w d5,-(a7)
  70.         move.w #45,-(a7)
  71.         jsr doorsos::DrawStrXY
  72.         add.w #8,d5
  73.         add.l #12,a4
  74.         dbra.s d7,loopp
  75.         lea 42(a7),a7
  76.         bsr invert
  77. select_loop:
  78.         jsr userlib::idle_loop
  79.         cmp.w #264,d0
  80.         beq exit
  81.         cmp.w #340,d0
  82.         beq.s sbas
  83.         cmp.w #337,d0
  84.         beq.s shaut
  85.         cmp.w #13,d0
  86.         beq.S selection
  87.         bra select_loop
  88. sbas    cmp.b #3,select
  89.         beq.s select_loop
  90.         add.b #1,select
  91.         moveq #7,d6
  92. loopb   bsr.s invert
  93.         add.w #1,x_cur
  94.         bsr.S invert
  95.         dbra.s d6,loopb                     
  96.         bra.s select_loop
  97. shaut   tst.b select
  98.         beq.s select_loop
  99.         sub.b #1,select
  100.         moveq #7,d6
  101. looph   bsr.s invert
  102.         sub.w #1,x_cur
  103.         bsr.s invert
  104.         dbra.s d6,looph
  105.         bra.s select_loop
  106. invert  moveq #7,d4
  107.         move.w x_cur,d1
  108. loopi   moveq #15,d0
  109.         move.w #147,d2
  110.         clr.w d3
  111.         jsr graphlib::horiz
  112.         add.w #1,d1
  113.         move.w #1000,d7
  114. \loop   dbra.s d7,\loop
  115.         dbra.s d4,loopi
  116.         rts
  117. selection:
  118.         tst.b select
  119.         beq start_game
  120.         cmp.b #3,select
  121.         beq exit
  122.         cmp.b #2,select
  123.         beq print_high
  124.         bra options_menu
  125. print_high:
  126.         bsr.s disp_high
  127. \wait   jsr userlib::idle_loop
  128.         cmp.w #264,d0
  129.         beq menu
  130.         cmp.w #13,d0
  131.         beq menu
  132.         bra \wait
  133. disp_high
  134.         bsr pic
  135.         lea.l veasy_str(pc),a5
  136.         moveq #31,d6
  137.         moveq #4,d7
  138. loop1   move.w #1,-(a7)
  139.         move.l a5,-(a7)
  140.         move.w d6,-(a7)
  141.         clr.w -(a7)
  142.         jsr doorsos::DrawStrXY   ;10*5
  143.         add.w #10,d6
  144.         add.l #7,a5
  145.         dbra.s d7,loop1
  146.         moveq #4,d6
  147.         lea.l veasy(pc),a5
  148.         moveq #31,d7
  149. loopps  move.w #1,-(a7)
  150.         move.l a5,-(a7)
  151.         move.w d7,-(a7)
  152.         move.w #46,-(a7)
  153.         jsr doorsos::DrawStrXY   ;10*5
  154.         add.w #10,d7
  155.         lea 16(a5),a5
  156.         dbra.s d6,loopps
  157.         lea.l veasy+14(pc),a5
  158.         moveq #4,d6
  159.         moveq #31,d7
  160. loop0   move.w (a5),d0
  161.         print_d0 #130,d7,#4
  162.         add.w #10,d7
  163.         lea 16(a5),a5
  164.         dbra.s d6,loop0
  165.         lea 100(a7),a7
  166.         rts
  167. options_menu:      
  168.         bsr pic
  169.         lea.l mode_str(pc),a4
  170.         moveq #4,d7
  171.         moveq #40,d5
  172. looop   move.w #4,-(a7)
  173.         move.l a4,-(a7)
  174.         move.w d5,-(a7)
  175.         move.w #25,-(a7)
  176.         jsr doorsos::DrawStrXY
  177.         add.w #8,d5
  178.         add.l #6,a4
  179.         dbra.s d7,looop
  180.         lea 50(a7),a7
  181.         move.w #40,x_cur
  182.         clr.b select
  183.         bsr put_option
  184. option_loop:
  185.         jsr userlib::idle_loop
  186.         cmp.w #264,d0
  187.         beq.s \retour
  188.         cmp.w #340,d0
  189.         beq.S osbas
  190.         cmp.w #337,d0
  191.         beq.S oshaut
  192.         cmp.w #13,d0
  193.         beq.s option_select
  194.         bra.S option_loop
  195. \retour move.b #1,select
  196.         move.w #48,x_cur
  197.         bra menu
  198. osbas   cmp.b #4,select
  199.         beq.s option_loop
  200.         add.b #1,select
  201.         moveq #7,d6
  202. looopb  bsr invert
  203.         add.w #1,x_cur
  204.         bsr invert
  205.         dbra.s d6,looopb
  206.         bra.s option_loop
  207. oshaut  tst.b select
  208.         beq.s option_loop
  209.         sub.b #1,select
  210.         moveq #7,d6
  211. loooph  bsr invert
  212.         sub.w #1,x_cur
  213.         bsr invert
  214.         dbra.s d6,loooph
  215.         bra.s option_loop
  216. option_select:
  217.         bsr invert
  218.         tst.b select
  219.         beq.s change_mode
  220.         cmp.b #1,select
  221.         beq.s change_diff
  222.         tst.b sel_1
  223.         beq.s \passe
  224.         cmp.b #2,select
  225.         beq.s change_level
  226.         cmp.b #3,select
  227.         beq change_wrap
  228.         cmp.b #4,select
  229.         beq.s change_lives
  230. \passe  bsr invert
  231.         bra option_loop
  232. change_mode:
  233.         tst.b sel_1
  234.         bne.s chgmd
  235.         move.b #1,sel_1
  236. disp    bsr put_option
  237.         bra option_loop
  238. chgmd   clr.b sel_1
  239.         bclr.b #1,flag
  240.         move.b #3,sel_5
  241.         move.B #1,sel_3
  242.         bra.s disp
  243. change_diff
  244.         cmp.b #4,sel_2
  245.         beq.s chgdiff
  246.         add.b #1,sel_2
  247.         bra.S disp
  248. chgdiff clr.b sel_2
  249.         bra.s disp
  250. change_level:
  251.         cmp.b #level_nbr,sel_3
  252.         beq.s chglvl
  253.         add.b #1,sel_3
  254.         bra.s disp
  255. chglvl  move.b #1,sel_3
  256.         bra.s disp
  257. change_lives
  258.         cmp.b #6,sel_5
  259.         beq.s chglive
  260.         add.b #1,sel_5
  261.         bra.s disp
  262. chglive move.b #2,sel_5
  263.         bra.s disp
  264. change_wrap
  265.         bchg.b #1,flag
  266.         bra disp
  267. put_option:
  268.         clr.l d0
  269.         move.b sel_1,d0
  270.         lea.l play_1(pc),a0
  271.         mulu #5,d0
  272.         add.l d0,a0
  273.         move.w #4,-(a7)
  274.         move.l a0,-(a7)
  275.         move.l #$00650028,-(a7)
  276.         jsr doorsos::DrawStrXY    ; 10
  277.         clr.l d0
  278.         move.b sel_2,d0
  279.         lea.l veasy_str(pc),a0
  280.         mulu #7,d0
  281.         add.l d0,a0
  282.         move.w #4,-(a7)
  283.         move.l a0,-(a7)
  284.         move.l #$005F0030,-(a7)
  285.         jsr doorsos::DrawStrXY    ;10
  286.         clr.l d0
  287.         move.b sel_3,d0
  288.         sub.b #1,d0
  289.         print_d0 #110,#56,#4
  290.         lea.l off_str(pc),a0
  291.         btst.b #1,flag
  292.         beq.s \passe
  293.         lea 4(a0),a0
  294. \passe  move.w #4,-(a7)
  295.         move.l a0,-(a7)
  296.         move.l #$00650040,-(a7)
  297.         jsr doorsos::DrawStrXY    ;10
  298.         clr.l d0
  299.         move.b sel_5,d0
  300.         print_d0 #110,#72,#4
  301.         lea 30(a7),a7
  302.         bra invert
  303. pic     jsr graphlib::clr_scr
  304.         lea.l picture1(pc),a0
  305.         move.b #$FF,d3
  306.         moveq #10,d0
  307.         clr.w d1
  308.         jsr graphlib::put_sprite_mask
  309.         clr.w -(a7)
  310.         jsr doorsos::ST_busy
  311.         pea email(pc)
  312.         jsr doorsos::ST_showHelp
  313.         lea 6(a7),a7
  314.         rts
  315.  
  316.  
  317.  
  318. start_game:
  319.         clr.l d0
  320.         move.b sel_3,d0
  321.         sub.b #1,d0
  322.         move.w d0,level
  323.         bset.b #0,flag
  324.         clr.l d0
  325.         move.b sel_5,d0
  326.         move.w d0,lives_1
  327.         move.w d0,lives_2
  328.         move.w #1000,time
  329.         tst.b sel_1       ; play solo
  330.         bne \apres
  331.         bclr.b #1,flag    ; no wrap
  332.         bclr.b #0,flag    ; play solo
  333.         clr.w level       ; begin at level 1
  334.         move.w #3,lives_1 ; have 3 lives
  335. \apres  lea.l speed_table(pc),a0
  336.         clr.w d0
  337.         move.b sel_2,d0
  338.         mulu #2,d0
  339.         move.w 0(a0,d0.w),speed
  340.         bsr int_on
  341.         move.w #3,lives
  342. othloop bsr ini_var
  343.         bsr ini_screen
  344.         bsr disp_level
  345. dieloop bsr ini_screen
  346.         bsr ini_random
  347.         btst.b #0,flag
  348.         bne info
  349.         bsr big_info_1p
  350.         bra info_1p
  351. main_loop:
  352.         bsr delay
  353.         btst.b #0,flag
  354.         beq \apres
  355.         move.w #mask0,d0
  356.         bsr get_key
  357.         btst.b #4,d0
  358.         beq up_2
  359.         btst.b #7,d0
  360.         beq right_2
  361.         btst.b #6,d0
  362.         beq left_2
  363.         move.w #mask5,d0
  364.         bsr get_key
  365.         btst.B #6,d0
  366.         beq down_2
  367.  
  368. \apres  move.w #mask0,d0
  369.         bsr get_key
  370.         btst.b #0,d0
  371.         beq up_1
  372.         btst.b #3,d0
  373.         beq right_1
  374.         btst.b #1,d0
  375.         beq left_1
  376.         btst.b #2,d0
  377.         beq down_1
  378.         move.w #mask6,d0
  379.         bsr get_key
  380.         btst.b #0,d0
  381.         beq fin_du_jeu
  382.         move.w #mask1,d0
  383.         bsr get_key
  384.         btst.b #0,d0
  385.         beq pause
  386.         bra up_dated
  387.  
  388. revient bsr wait_key_esc_off
  389.         bsr int_off
  390.         bra menu
  391.  
  392. down_1  cmp.w #3,dir_1
  393.         beq up_dated
  394.         move.w #1,dir_1
  395.         bra up_dated
  396. up_1    cmp.w #1,dir_1
  397.         beq up_dated
  398.         move.w #3,dir_1
  399.         bra up_dated
  400. right_1 tst.w dir_1
  401.         beq up_dated
  402.         move.w #2,dir_1
  403.         bra up_dated
  404. left_1  cmp.w #2,dir_1
  405.         beq up_dated
  406.         clr.w dir_1
  407.         bra up_dated
  408.  
  409. down_2  cmp.w #3,dir_2
  410.         beq up_dated
  411.         move.w #1,dir_2
  412.         bra up_dated
  413. up_2    cmp.w #1,dir_2
  414.         beq up_dated
  415.         move.w #3,dir_2
  416.         bra up_dated
  417. right_2 tst.w dir_2
  418.         beq up_dated
  419.         move.w #2,dir_2
  420.         bra up_dated
  421. left_2  cmp.w #2,dir_2
  422.         beq up_dated
  423.         clr.w dir_2
  424.         bra up_dated
  425.  
  426.  
  427. up_dated:
  428.         bsr m1_0
  429.         bsr do_up_dated
  430.         move.w d2,-(a7)
  431.         bsr m0_1
  432.         move.w (a7)+,d2
  433.         btst.b #0,flag
  434.         bne \passe
  435.         cmp.w #2,d2
  436.         beq p_touche
  437.         cmp.w #1,d2
  438.         beq die_1
  439.         bra info_1p
  440.  
  441. \passe  cmp.w #1,d2
  442.         beq p1_die
  443.         cmp.w #2,d2
  444.         beq p_1p
  445.         bsr m2_0
  446.         bsr do_up_dated
  447.         move.w d2,-(a7)
  448.         bsr m0_2
  449.         move.w (a7)+,d2
  450.         cmp.w #1,d2
  451.         beq p2_die
  452.         cmp.w #2,d2
  453.         beq p_2p
  454.         bra main_loop
  455.  
  456. do_up_dated:
  457.         move.l #x,a0       ; quel point est a efface? 
  458.         move.w long,d1     ;
  459.         mulu #4,d1         ;long*4-4 = point a efface
  460.         add.w d1,a0        ;
  461.         sub.w #4,a0        ;
  462.         move.l (a0),d0     ; si X=0 alors on efface pas
  463.         tst.l d0        ;
  464.         beq passe       ;
  465.         move.w (a0)+,d0    ; on efface la fin de la queue...
  466.         move.w (a0)+,d1    ;
  467.         move.w #1,d2
  468.         bsr pixel
  469.         sub.w #1,d1
  470.         bsr pixel
  471.         sub.w #1,d0
  472.         bsr pixel
  473.         add.w #1,d1 
  474.         bsr pixel
  475.         move.l #0,-(a0)    ; et dans la liste des coordonnes
  476. passe   move.l #z,a0       ; on decale les coordonnees d'un rang vers le bas
  477.         move.l #z,a1       ;
  478.         add.w #4,a1        ;
  479.         move.w #LONG*LONG-1,d0      ;
  480. \loop   move.l -(a0),-(a1) ;
  481.         dbra d0,\loop       ;                          
  482.         move.l #y,a0       ; on prend les anciennes premieres coordonnes
  483.         move.w (a0)+,d0    ;
  484.         move.w (a0),d1     ;
  485.         tst.w dir
  486.         beq dir0
  487.         cmp.w #1,dir
  488.         beq dir1
  489.         cmp.w #2,dir
  490.         beq dir2
  491.         sub.w #2,d0
  492.         bra apres 
  493. dir0    sub.w #2,d1
  494.         bra apres
  495. dir1    add.w #2,d0 
  496.         bra apres
  497. dir2    add.w #2,d1
  498. apres   bsr check_pixel
  499.         tst.w d2
  500.         bne touche
  501.         cmp.w #94,d0
  502.         bge hit
  503.         move.l #x,a0       ; rien a l'horizon donc on met affiche le point
  504.         move.w d0,(a0)+    ; et on le remet dans la x
  505.         move.w d1,(a0)     ;
  506.         bsr print_pixel
  507.         clr.w d2           ; no error!
  508.         rts
  509.  
  510.  
  511. touche  move.l #point,a0
  512.         cmp.w (a0)+,d0
  513.         bne hit
  514.         cmp.w (a0),d1
  515.         bne hit
  516.         move.w #2,d2
  517.         rts
  518. hit     move.w #1,d2
  519.         rts
  520.  
  521. p_touche
  522.         add.w #1,stade_1
  523.         cmp.w #11,stade_1
  524.         beq p_gagne
  525.         add.w #LONG,long_1
  526.         move.l #x1,a0       ; et les coordonnees du point sont maintenant
  527.         move.l #point,a1   ; celle de la trainee
  528.         move.l (a1),(a0)   ;
  529.         bsr ini_random     ; on fait random pour avoir un nouveau point
  530.         add.w #200,time    ; on remet un peu de temps
  531.         bsr big_info_1p
  532.         bra info_1p
  533.  
  534.  
  535. p_gagne cmp.w #level_nbr-1,level
  536.         beq gagne
  537.         add.w #1,level
  538.         add.w #500,time
  539.         add.w #1,lives_1
  540.         bra othloop
  541.  
  542.  
  543. gagne   move.w #2,-(a7)
  544.         jsr doorsos::FontSetSys
  545.         move.w #4,-(a7)
  546.         pea.l win_str(pc)
  547.         move.w #25,-(a7)
  548.         move.w #20,-(a7)
  549.         jsr doorsos::DrawStrXY
  550.         lea 12(a7),a7
  551.         add.w #1000,time
  552.         bra good
  553.  
  554. p_1p    add.w #1,stade_1
  555.         cmp.w #11,stade_1
  556.         beq.s p1_wins
  557.         add.w #LONG,long_1
  558.         move.l #x1,a0
  559. rejoue  move.l #point,a1
  560.         move.l (a1),(a0)
  561.         bsr ini_random
  562.         bra info
  563. p_2p    add.w #1,stade_2
  564.         cmp.w #11,stade_2
  565.         beq p2_wins
  566.         add.w #LONG,long_2
  567.         move.l #x2,a0
  568.         bra.s rejoue
  569.  
  570. p1_wins moveq #11,d7
  571.         move.w #2,-(a7)
  572.         jsr doorsos::FontSetSys
  573.         move.w #4,-(a7)
  574.         pea win1_str(pc)
  575.         move.w #40,-(a7)
  576.         clr.w -(a7)
  577.         jsr doorsos::DrawStrXY
  578.         lea 12(a7),a7
  579. \loop   moveq #1,d0
  580.         moveq #1,d1
  581.         moveq #78,d2
  582.         moveq #91,d3
  583.         clr.w d4
  584.         jsr graphlib::fill
  585.         bsr delayc
  586.         dbra.s d7,\loop
  587.         bsr wait
  588.         bra revient
  589.  
  590. p2_wins moveq #9,d7
  591.         move.w #2,-(a7)
  592.         jsr doorsos::FontSetSys
  593.         move.w #4,-(a7)
  594.         pea win2_str(pc)
  595.         move.w #40,-(a7)
  596.         move.w #80,-(a7)
  597.         jsr doorsos::DrawStrXY
  598.         lea 12(a7),a7
  599. \loop   moveq #78,d0
  600.         moveq #1,d1
  601.         moveq #80,d2
  602.         moveq #91,d3
  603.         clr.w d4
  604.         jsr graphlib::fill
  605.         bsr delayc
  606.         dbra.s d7,\loop
  607.         bsr wait
  608.         bra revient
  609.  
  610.  
  611. delay   move.w speed,d7
  612. delay_l nop
  613.         dbra.s d7,delay_l
  614.         rts
  615.  
  616.  
  617.  
  618. info    clr.w -(a7)
  619.         jsr doorsos::FontSetSys
  620.         pea p1_str
  621.         jsr doorsos::ST_showHelp
  622.         lea 6(a7),a7
  623.         move.w stade_1,d0
  624.         print_d0 #30,#95,#4
  625.         move.w lives_1,d0
  626.         print_d0 #40,#95,#4
  627.         WriteStr #45,#95,#4,lives_str      
  628.         WriteStr #70,#95,#4,p2_str
  629.         move.w stade_2,d0
  630.         print_d0 #100,#95,#4
  631.         move.w lives_2,d0
  632.         print_d0 #110,#95,#4
  633.         WriteStr #115,#95,#4,lives_str
  634.         bra main_loop
  635.  
  636.  
  637. big_info_1p
  638.         clr.w -(a7)
  639.         jsr doorsos::FontSetSys
  640.         pea score_str
  641.         jsr doorsos::ST_showHelp
  642.         lea 6(a7),a7
  643.         WriteStr #130,#95,#1,titre
  644.         move.w lives_1,d0
  645.         print_d0 #48,#95,#1
  646.         WriteStr #56,#95,#1,lives_str
  647.         move.w level,d0
  648.         print_d0 #90,#95,#1
  649.         WriteStr #78,#95,#1,level_str
  650.         WriteStr #103,#95,#4,dot_str
  651.         move.w stade_1,d0
  652.         print_d0 #120,#95,#4
  653.         rts
  654. info_1p WriteStr #23,#95,#4,blank_over
  655.         sub.w #1,time
  656.         beq timeout
  657.         move.w time,d0
  658.         print_d0 #23,#95,#4
  659.         bra main_loop
  660.  
  661. timeout move.w #2,-(a7)
  662.         jsr doorsos::FontSetSys
  663.         pea.l ent_esc(pc)
  664.         jsr doorsos::ST_showHelp
  665.         lea 6(a7),a7
  666.         WriteStr #44,#40,#4,time_out_str
  667.         bsr wait
  668.         move.w #1000,time
  669.         sub.w #1,lives_1
  670.         beq perdu
  671.         bra othloop
  672.  
  673.  
  674. p1_die  bsr m2_0
  675.         bsr do_up_dated
  676.         move.w d2,-(a7)
  677.         bsr m0_2
  678.         move.w (a7)+,d2
  679.         cmp.w #1,d2
  680.         beq die_12
  681.         moveq #9,d7
  682.         move.w #2,-(a7)
  683.         jsr doorsos::FontSetSys
  684.         lea 2(a7),a7
  685.         WriteStr #20,#40,#4,crash_str
  686. fx_loop moveq #1,d0
  687.         moveq #1,d1
  688.         moveq #78,d2
  689.         moveq #91,d3
  690.         clr.w d4
  691.         jsr graphlib::fill
  692.         bsr delayc
  693.         dbra.s d7,fx_loop
  694.         sub.w #1,lives_1
  695.         beq p2_wins
  696.         bra dieloop
  697.  
  698. p2_die  moveq #9,d7
  699.         move.w #2,-(a7)
  700.         jsr doorsos::FontSetSys
  701.         lea 2(a7),a7
  702.         WriteStr #100,#40,#4,crash_str
  703. f2_loop moveq #78,d0
  704.         moveq #1,d1
  705.         moveq #80,d2
  706.         moveq #91,d3
  707.         clr.w d4
  708.         jsr graphlib::fill
  709.         bsr delayc
  710.         dbra.s d7,f2_loop
  711.         sub.w #1,lives_2
  712.         beq p1_wins
  713.         bra dieloop
  714.  
  715. die_12  moveq #9,d7
  716.         move.w #2,-(a7)
  717.         jsr doorsos::FontSetSys
  718.         lea 2(a7),a7
  719.         WriteStr #100,#40,#4,crash_str
  720. f12loop moveq #78,d0
  721.         moveq #1,d1
  722.         moveq #80,d2
  723.         moveq #91,d3
  724.         clr.w d4
  725.         jsr graphlib::fill
  726.         bsr delayc
  727.         dbra.s d7,f12loop
  728.         moveq #9,d7
  729.         move.w #2,-(a7)
  730.         jsr doorsos::FontSetSys
  731.         lea 2(a7),a7
  732.         WriteStr #20,#40,#4,crash_str
  733. f21loop moveq #1,d0
  734.         moveq #1,d1
  735.         moveq #78,d2
  736.         moveq #91,d3
  737.         clr.w d4
  738.         jsr graphlib::fill
  739.         bsr delayc
  740.         dbra.s d7,f21loop
  741.         bra dieloop
  742.  
  743.  
  744. die_1   move.w #2,-(a7)
  745.         jsr doorsos::FontSetSys
  746.         lea 2(a7),a7
  747.         WriteStr #60,#40,#4,crash_str
  748.         moveq #9,d7
  749. f1_loop moveq #1,d0
  750.         moveq #1,d1
  751.         move.w #158,d2
  752.         moveq #91,d3
  753.         clr.w d4
  754.         jsr graphlib::fill
  755.         bsr delayc
  756.         dbra.s d7,f1_loop
  757.         bsr wait                  ; on attend que la touche ENTER soit presse
  758.         sub.w #1,lives_1
  759.         bne othloop
  760.  
  761.  
  762. perdu   SetFont #2
  763.         WriteStr #30,#40,#4,game_over_str
  764. good    pea ent_esc(PC)        ; affiche press enter
  765.         jsr doorsos::ST_showHelp     ;
  766.         lea 4(a7),a7              ;
  767.         bsr wait
  768. fin_du_jeu
  769.         bsr int_off
  770.         SetFont #1
  771.         move.w time,d7
  772.         clr.w d0
  773.         move.b sel_2,d0
  774.         move.l #veasy,a5
  775.         mulu #16,d0
  776.         add.w d0,a5
  777.         cmp.w 14(a5),d7
  778.         ble menu
  779.         move.w d7,14(a5)
  780.         bsr disp_high
  781.         WriteStr #40,#80,#4,enter_str
  782.         WriteStr #40,#20,#4,new_score_str
  783.         clr.l d0
  784.         move.b sel_2,d0
  785.         move.l #veasy,a5
  786.         mulu #16,d0
  787.         add.w d0,a5
  788.         move.b sel_2,d1
  789.         mulu #10,d1
  790.         add.w #31,d1
  791.         move.w #46,d0
  792.         move.w #82,d2
  793.         move.w #8,d3
  794.         move.w #1,d4
  795.         jsr graphlib::fill
  796.         Take_str #46,d1,#12
  797. \passe  move.B #2,select
  798.         move.w #40+8*2,x_cur
  799.         bra print_high
  800.  
  801. wait    move.w #mask6,d0
  802.         bsr get_key
  803.         btst.b #0,d0
  804.         beq wait_key_esc_off
  805.         move.w #mask1,d0
  806.         bsr get_key
  807.         btst.b #0,d0
  808.         beq wait_key_enter_off
  809.         bra wait
  810.  
  811. wait_key_esc_off:
  812.         move.w #mask6,d0
  813.         bsr get_key
  814.         btst.b #0,d0
  815.         beq wait_key_esc_off
  816.         rts
  817.  
  818. wait_key_enter_off:
  819.         move.w #mask1,d0
  820.         bsr get_key
  821.         btst.b #0,d0
  822.         beq wait_key_enter_off
  823.         rts
  824.  
  825. delayc  move.w #1000,d0
  826. \loopa  moveq #100,d1
  827. \loopc  dbra.s d1,\loopc
  828.         dbra.s d0,\loopa
  829.         rts
  830.  
  831. get_key move.w  d0,$600018
  832.         move.w #50,d0
  833. delay_c dbra d0,delay_c
  834.         move.b $60001b,d0
  835. exit    rts
  836.  
  837.  
  838.  
  839.  
  840. ini_screen:
  841.         jsr graphlib::clr_scr
  842.         clr.w d0                
  843.         clr.w d1
  844.         move.w #159,d4
  845.         move.w #93,d5
  846.         jsr graphlib::frame
  847.         lea level0(pc),a0
  848.         move.w level,d0
  849.         tst.w d0
  850.         beq \ok
  851.         sub.w #1,d0
  852. \loop   move.w (a0)+,d1
  853.         cmp.w #255,d1
  854.         bne \loop
  855.         dbra d0,\loop
  856. \ok     move.l #x1,a1
  857.         move.l (a0),(a1)
  858.         move.w (a0)+,d0
  859.         move.w (a0)+,d1
  860.         move.w (a0)+,dir_1
  861.         clr.w d2
  862.         bsr print_pixel
  863.         move.l #x2,a1
  864.         move.l (a0),(a1)
  865.         move.w (a0)+,d0
  866.         move.w (a0)+,d1
  867.         btst.b #0,flag
  868.         beq \passe
  869.         bsr print_pixel
  870. \passe  move.w (a0)+,dir_2
  871. loop_level:
  872.         cmp.w #$FF,(a0)
  873.         beq exit
  874.         move.w (a0)+,d0 
  875.         move.w (a0)+,d1
  876.         move.w (a0)+,d2
  877.         move.w (a0)+,d3
  878.         move.w #2,d4
  879.         jsr graphlib::fill
  880.         bra loop_level
  881.  
  882. disp_level:
  883.         bsr wait_key_enter_off
  884.         SetFont #2
  885.         clr.l d0
  886.         move.w level,d0
  887.         add.b #48,d0
  888.         move.l #levels_str,a0
  889.         move.b d0,7(a0)
  890.         WriteStrA #42,#40,#4,a0
  891.         pea.l ent_esc(pc)
  892.         jsr doorsos::ST_showHelp
  893.         lea 4(a7),a7
  894.         bra wait
  895.  
  896. ini_random:                          ; affiche un point au hazard
  897.         clr.l d0
  898.         clr.l d1
  899.         moveq #80,d0                ; limit=45 (46-1)
  900.         jsr userlib::random
  901.         lsl.l #1,d0                   ; on multiplie par 2 pour avoir un nombre pair   
  902.         move.w d0,d1
  903.         clr.l d0
  904.         moveq #46,d0                ; meme chose pour d1
  905.         jsr userlib::random
  906.         lsl.l #1,d0
  907.         bsr check_pixel              ; on verifie si il n'y a pas de probleme   
  908.         tst.w d2                     ; si oui alors d2=/=0
  909.         bne ini_random               ; on recommence
  910.         bsr print_pixel              ; on affiche le pixel   
  911.         move.l #point,a0             ; on enregistre ses coordonnees   
  912.         move.w d0,(a0)+
  913.         move.w d1,(a0)
  914.         rts
  915.  
  916. pixel   movem.l d0-d3/a0,-(a7)   ; d2=0:pixel_on (d1.w=x d0.w=y)
  917.         lea $4c00,a0             ; d2=1:pixel_off (d1.w=x d0.w=y)
  918.         cmp.w #99,d0             ; d2=2:find_pixel (btst d4,(a4)=0:rien)
  919.         bcc pasbon
  920.         lsl.w #1,d0
  921.         move.w d0,d3
  922.         lsl.w #4,d0
  923.         sub.w d3,d0
  924.         lea 0(a0,d0.w),a0
  925.         cmp.w #159,d1
  926.         bcc pasbon
  927.         move.w d1,d3
  928.         lsr.w #3,d1
  929.         cmp.w #2,d2
  930.         beq \tst
  931.         not.w d3
  932.         and.w #7,d3
  933.         tst.b d2
  934.         bne \off
  935.         bset.b d3,0(a0,d1.w)
  936.         bra pasbon                
  937. \off    bclr.b d3,0(a0,d1.w)
  938.         bra pasbon
  939. \tst    lea 0(a0,d1.w),a4
  940.         not.w d3
  941.         and.w #7,d3
  942.         move.w d3,d4
  943.         bra pasbon
  944.         sub.l a4,a4
  945. pasbon  movem.l (a7)+,d0-d3/a0
  946.         rts
  947.  
  948.  
  949.  
  950. pause   bsr wait_key_enter_off
  951.         pea.l pause_str(pc)
  952.         jsr doorsos::ST_showHelp
  953.         lea 4(a7),a7
  954.         bsr wait
  955.         btst.b #0,flag
  956.         bne info
  957.         bsr big_info_1p
  958.         bra info_1p
  959.  
  960. take_string:
  961.         jsr userlib::idle_loop
  962.         cmp.w #257,d0
  963.         beq undo
  964.         cmp.w #264,d0
  965.         beq \bon
  966.         cmp.w #13,d0
  967.         beq \bon
  968.         move.b d0,(a5)+
  969.         move.w #2,-(a7)
  970.         move.w d6,-(a7)
  971.         move.w d5,-(a7)
  972.         move.w d0,-(a7)
  973.         jsr userlib::DrawCharXY
  974.         lea 8(a7),a7
  975.         add.w #6,d5
  976.         dbra d7,take_string
  977. \bon    cmp.w d4,d7
  978.         beq take_string
  979.         clr.b (a5)
  980.         rts
  981. undo    cmp.w d4,d7
  982.         beq take_string
  983.         add.w #1,d7
  984.         clr.b -(a5)
  985.         sub.w #6,d5
  986.         move.w #4,-(a7)
  987.         move.w d6,-(a7)
  988.         move.w d5,-(a7)
  989.         move.w #32,-(a7)
  990.         jsr userlib::DrawCharXY
  991.         lea 8(a7),a7
  992.         bra take_string
  993.  
  994.  
  995. print_value:
  996.         move.l #str+8,a0
  997.         clr.b (a0)
  998.         clr.l d1
  999. print_loop:
  1000.         add.l #1,d1
  1001.         divu #10,d0
  1002.         swap d0
  1003.         add.b #48,d0
  1004.         move.b d0,-(a0)
  1005.         clr.w d0
  1006.         swap d0
  1007.         tst.w d0
  1008.         bne print_loop
  1009.         rts
  1010.  
  1011. check_pixel:                    ; vÇrifie si en d2/d1 il y a deja quelue chose
  1012.         btst.b #1,flag
  1013.         beq \begin
  1014.         cmp.w #94,d0
  1015.         bne \non_1
  1016.         move.w #2,d0
  1017. \non_1  tst.w d0
  1018.         bne \non_2
  1019.         move.w #92,d0
  1020. \non_2  cmp.w #160,d1
  1021.         bne \non_3
  1022.         move.w #2,d1
  1023. \non_3  tst.w d1
  1024.         bne \begin
  1025.         move.w #158,d1
  1026. \begin  movem.w d0-d1,-(a7)
  1027.         move.w #2,d2
  1028.         bsr pixel
  1029.         btst d4,(a4)
  1030.         beq \non
  1031.         sub.w #1,d0
  1032.         bsr pixel
  1033.         btst d4,(a4)
  1034.         beq \non
  1035.         sub.w #1,d1
  1036.         bsr pixel
  1037.         btst d4,(a4)
  1038.         beq \non
  1039.         add.w #1,d0
  1040.         bsr pixel
  1041.         btst d4,(a4)
  1042.         bne \okpxl
  1043. \non    clr.w d2            ; si tout va bien alors d0=0
  1044. \okpxl  movem.w (a7)+,d0-d1
  1045.         rts
  1046.  
  1047.  
  1048. print_pixel:
  1049.         movem d0-d1,-(a7)
  1050.         clr.w d2
  1051.         bsr pixel
  1052.         sub.w #1,d0
  1053.         bsr pixel
  1054.         sub.w #1,d1
  1055.         bsr pixel
  1056.         add.w #1,d0
  1057.         bsr pixel
  1058.         movem (a7)+,d0-d1
  1059.         rts
  1060.  
  1061. ini_var move.w #1,stade_1
  1062.         move.w #1,stade_2
  1063.         move.w #LONG,long_1
  1064.         move.w #LONG,long_2
  1065.         move.l #x1,a0
  1066.         bsr ini_mat
  1067.         move.l #x2,a0
  1068. ini_mat move.w #LONG*LONG-1,d0
  1069. clr_mat clr.l (a0)+
  1070.         dbra d0,clr_mat
  1071.         rts
  1072.  
  1073. m1_0    move.w stade_1,stade
  1074.         move.w lives_1,lives
  1075.         move.w long_1,long
  1076.         move.w dir_1,dir
  1077.         move.l #x1,a0
  1078.         move.l #x,a1
  1079.         move.w #LONG*LONG-1,d0
  1080. loop1_0 move.l (a0)+,(a1)+
  1081.         dbra d0,loop1_0
  1082.         rts
  1083. m2_0    move.w stade_2,stade
  1084.         move.w lives_2,lives
  1085.         move.w long_2,long
  1086.         move.w dir_2,dir
  1087.         move.l #x2,a0
  1088.         move.l #x,a2
  1089.         move.w #LONG*LONG-1,d0
  1090. loop2_0 move.l (a0)+,(a2)+
  1091.         dbra d0,loop2_0
  1092.         rts
  1093. m0_1    move.w stade,stade_1
  1094.         move.w lives,lives_1
  1095.         move.w long,long_1
  1096.         move.w dir,dir_1
  1097.         move.l #x,a0
  1098.         move.l #x1,a1
  1099.         move.w #LONG*LONG-1,d0
  1100. loop0_1 move.l (a0)+,(a1)+
  1101.         dbra d0,loop0_1
  1102.         rts           
  1103. m0_2    move.w stade,stade_2
  1104.         move.w lives,lives_2
  1105.         move.w long,long_2
  1106.         move.w dir,dir_2
  1107.         move.l #x,a0
  1108.         move.l #x2,a2
  1109.         move.w #LONG*LONG-1,d0
  1110. loop0_2 move.l (a0)+,(a2)+
  1111.         dbra d0,loop0_2
  1112.         rts
  1113.  
  1114. int_on  clr.l d0
  1115.         move.w #$0700,d0
  1116.         trap #1
  1117.         bclr.b #2,($600001)
  1118.         move.l ($64),old_int1
  1119.         move.l #new_int,($64)
  1120.         bset.b #2,($600001)
  1121.         trap #1
  1122.     rts
  1123. int_off clr.l d0
  1124.         move.w #$0700,d0
  1125.         trap #1
  1126.         bclr.b #2,($600001)
  1127.         move.l old_int1,($64)
  1128.         bset.b #2,($600001)
  1129.         trap #1
  1130.     rts
  1131. new_int rte
  1132.  
  1133. ent_esc       dc.b "press [ENTER] ",0
  1134. p1_str        dc.b "P1 dots:",0
  1135. p2_str        dc.b "P2 dots:",0
  1136. pause_str     dc.b "Game paused",0
  1137. lives_str     dc.b "lives",0
  1138. score_str     dc.b "score:",0
  1139. dot_str       dc.b "dots:",0
  1140. time_out_str  dc.b "Time Out!",0
  1141. game_over_str dc.b "Game Over...",0
  1142. blank_over    dc.b "            ",0
  1143. crash_str     dc.b "CRASH!",0
  1144. win_str       dc.b "CONGRATULATIONS!",0
  1145. level_str     dc.b "Lvl",0
  1146. blank_str     dc.b "       ",0
  1147. levels_str    dc.b "-LEVEL  -",0
  1148. win1_str      dc.b "P1 WINS!!!",0
  1149. win2_str      dc.b "P2 WINS!!!",0
  1150. choose_str    dc.b "choose your mode:",0
  1151.  
  1152.  
  1153. new_score_str dc.b "New High Score!",0
  1154. enter_str     dc.b "Enter your name",0
  1155.  
  1156. titre  dc.b "Nibble89",0
  1157. email dc.b "v1.1 by Endive <GefunS@I-France.com>",0
  1158.  
  1159.  
  1160. time    dc.w 0
  1161.  
  1162. play_str   dc.b " Play Game ",0
  1163. option_str dc.b "  Options  ",0
  1164. hisc_str   dc.b "High Scores",0
  1165. exit_str   dc.b " Quit Game ",0
  1166.  
  1167. hs_str     dc.b "     HIGH SCORE     ",0
  1168. op_str     dc.b "    OPTIONS MENUS   ",0
  1169.  
  1170.  
  1171. veasy  dc.b "alban gervai",0,0,3,232
  1172. easy   dc.b "alban gervai",0,0,3,232
  1173. medium dc.b "alban gervai",0,0,3,232
  1174. hard   dc.b "alban gervai",0,0,3,232
  1175. vhard  dc.b "alban gervai",0,0,3,232
  1176.  
  1177. mode_str   dc.b "Play ",0
  1178.            dc.b "Mode ",0
  1179.            dc.b "Level",0
  1180.            dc.b "Wrap ",0
  1181.            dc.b "lives",0
  1182. play_1     dc.b "Solo",0
  1183. play_2     dc.b "HvsH",0
  1184.  
  1185. sel_1      dc.b 0
  1186. sel_2      dc.b 0
  1187. sel_3      dc.b 1
  1188. sel_5      dc.b 3
  1189.  
  1190.  
  1191. veasy_str  dc.b "v easy",0
  1192. easy_str   dc.b " easy ",0
  1193. medium_str dc.b "medium",0
  1194. hard_str   dc.b " hard ",0          
  1195. vhard_str  dc.b "v hard",0
  1196.  
  1197. off_str    dc.b "off",0
  1198. on_str     dc.b "on ",0
  1199.  
  1200. speed_table dc.w 65535,35000,20000,10000,5000
  1201. flag       dc.b %00000000
  1202.  
  1203.  
  1204.  
  1205. _comment dc.b "Nibble89 v1.1 by Endive!",0
  1206.  
  1207.         BSS
  1208.  
  1209.  
  1210. select ds.b 1
  1211. x_cur  ds.w 1
  1212. str      ds.b 9
  1213. old_int1 ds.l 1
  1214. speed   ds.w 1
  1215. point   ds.l 1
  1216. level   ds.w 1
  1217. long    ds.w 1
  1218. long_1  ds.w 1
  1219. long_2  ds.w 1
  1220. stade   ds.w 1
  1221. stade_1 ds.w 1
  1222. stade_2 ds.w 1
  1223. dir     ds.w 1
  1224. dir_1   ds.w 1
  1225. dir_2   ds.w 1
  1226. lives   ds.w 1
  1227. lives_1 ds.w 1
  1228. lives_2 ds.w 1
  1229. x       ds.w 2 
  1230. y       ds.w LONG*LONG*2-4
  1231. z       ds.w 2
  1232. x1      ds.w 2 
  1233. y1      ds.w LONG*LONG*2-4
  1234. z1      ds.w 2
  1235. x2      ds.w 2 
  1236. y2      ds.w LONG*LONG*2-4
  1237. z2      ds.w 2
  1238.  
  1239.  end
  1240.  
  1241.  
  1242. ; Nibble89
  1243. ; par Alban Gervaise
  1244.