Ooops
November 28, 2020, 03:02:29 AM

Author Topic: [bb] Binary Tetris in Colour by Vic 3 Babes [ 1+ years ago ]  (Read 446 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
Title : Binary Tetris in Colour
Author : Vic 3 Babes
Posted : 1+ years ago

Description : You'll have to hum the tune I'm afraid - however, it's much better if you have some progressively nicer wavs to play depending on the number of lines that the player got - bit of a parp for one line, and something cute for 4 etc.  Plus a land sound.

I've commented-out the loadsound, playsound commands where you should put them - just do a search for playsound - but they're all in the move_down() function.  Loadsound is at the top natch.

line1.wav - 1 line
line2.wav - 2 lines
line3.wav - 3 lines
line4.wav - 4 lines

land.wav - sound of brick landing

I removed the error-checking for loading sounds from the init() function though.

This version uses colour bricks, and joins them together when touching.


Code :
Code: BlitzBasic
  1. ;3FF v1.2 - Harlequin Software 2002 - 2007
  2. ;Updated version 31 January 2007
  3. Const VERSION$="v1.2"
  4. AppTitle "3FF "+VERSION$
  5. Graphics 320,360,0,2
  6. Const ESCAPE=1, ENTER=28, SPACEBAR=57
  7. Const UPARROW=200, DOWNARROW=208, LEFTARROW=203, RIGHTARROW=205, LEFTCONTROL=29
  8. ;bit values for action
  9. Const PLAY=$1, QUITTED=$2, REDRAW=$4, LANDED=$8, GAMEOVER=$10, ESCAPED=$20
  10. Const BITSUSED=$3F
  11. Const DRAWN=BITSUSED Xor REDRAW, NOTLANDED=BITSUSED Xor LANDED
  12. Const GAMEOVER_OR_ESCAPED=GAMEOVER Or ESCAPED
  13. ;
  14. Const EMPTYROW=$801, FULLROW=$FFF, FULLVISIBLE=$7FE, HIDDENROW=$7FE
  15. Const EAST=-1, WEST=1, CLOCKWISE=1, ANTICLOCKWISE=-1
  16. ;East and West are inverted because - oh never mind
  17. Const ADDCOLOUR=True, ERASECOLOUR=False
  18. ;new for v1.2
  19. Const EMPTYSQUARE=-1
  20. Const SAMENORTH=1, SAMEEAST=2, SAMESOUTH=4, SAMEWEST=8
  21.  
  22. Global currentrow, shifter, rotation, numlines, startrow
  23. Global speed, time, action, score
  24.  
  25. ;new for v1.2
  26. Global tiles=CreateImage(16,16,112)
  27. Global empty=CreateImage(16,16)
  28.  
  29. ;Global line1snd=LoadSound("soundline1.wav")
  30. ;Global line2snd=LoadSound("soundline2.wav")
  31. ;Global line3snd=LoadSound("soundline3.wav")
  32. ;Global line4snd=LoadSound("soundline4.wav")
  33. ;Global landsnd=LoadSound("soundland.wav")
  34.  
  35. Dim leveldata(23)
  36. Dim levelpaused(21)
  37. Dim currentbrick(3,3)
  38. Dim nextbrick(3,3)
  39. Dim lines(3)
  40. ;new for v1.2
  41. Dim colourbrick(15,3)
  42. Dim nextcolourbrick(15,3)
  43. Dim colourlevel(10,21)
  44.  
  45. SeedRnd MilliSecs()
  46. init()
  47. ;################################ M A I N   L O O P #############################
  48. Repeat
  49.         draw_title()
  50.         clear_arrays(False)
  51.         draw_next_brick()
  52.         draw_score()
  53.         Flip False
  54.         action=0
  55.         Repeat
  56.                 Delay 1
  57.                 If KeyHit(ENTER) Then action=PLAY
  58.                 If KeyHit(ESCAPE) Then action=QUITTED
  59.         Until action
  60.         If action=PLAY
  61.                 FlushKeys()
  62.                 action=REDRAW
  63.                 speed=1000
  64.                 clear_arrays(True)
  65.                 get_a_brick()
  66.                 get_a_brick() ;to get "next brick" as well
  67.                 numlines=0
  68.                 draw_score()
  69.                 draw_play_area()
  70.                 time=MilliSecs()
  71.                 Repeat
  72.                         If action And LANDED
  73.                                 get_a_brick()
  74.                                 action=action And NOTLANDED
  75.                         Else
  76.                                 If MilliSecs()-time > speed
  77.                                         move_down()
  78.                                         time=MilliSecs()
  79.                                 Else
  80.                                         If KeyDown(DOWNARROW) And (MilliSecs()-time > 40) ;delay key-repeat
  81.                                                 move_down()
  82.                                                 time=MilliSecs()
  83.                                         Else
  84.                                                 If KeyHit(LEFTARROW)
  85.                                                         move_brick(WEST)
  86.                                                 Else
  87.                                                         If KeyHit(RIGHTARROW)
  88.                                                                 move_brick(EAST)
  89.                                                         Else
  90.                                                                 If KeyHit(UPARROW)
  91.                                                                         rotate_brick(CLOCKWISE)
  92.                                                                 Else
  93.                                                                         If KeyHit(LEFTCONTROL)
  94.                                                                                 rotate_brick(ANTICLOCKWISE)
  95.                                                                         EndIf
  96.                                                                 EndIf
  97.                                                         EndIf
  98.                                                 EndIf
  99.                                         EndIf
  100.                                 EndIf
  101.                         EndIf
  102.                         If action And REDRAW
  103.                                 If Not(action And LANDED) Then xor_brick(ADDCOLOUR)
  104.                                 Flip False
  105.                                 action=action And DRAWN
  106.                         Else
  107.                                 Delay 1 ;keep cpu usage down
  108.                         EndIf
  109.                         If KeyHit(SPACEBAR) Then pause()
  110.                         If KeyHit(ESCAPE) Then action=action Or ESCAPED
  111.                 Until action And GAMEOVER_OR_ESCAPED
  112.                 If action And GAMEOVER Then game_over_man()
  113.                 clear_arrays(False)
  114.         EndIf
  115. Until action = QUITTED
  116. End
  117. ;#############################################################
  118. Function clear_arrays(clearlevel)
  119. Local rownumber, row, column
  120.         If clearlevel
  121.                 For rownumber=0 To 21
  122.                         leveldata(rownumber)=EMPTYROW
  123.                 Next
  124.                 leveldata(22)=HIDDENROW
  125.                 For row=2 To 21
  126.                         For column=0 To 9
  127.                                 colourlevel(column,row)=EMPTYSQUARE
  128.                         Next
  129.                 Next
  130.         EndIf
  131.         For rownumber=0 To 3
  132.                 For rotation=0 To 15
  133.                         nextcolourbrick(rotation,rownumber)=EMPTYSQUARE
  134.                 Next
  135.         Next
  136. Return
  137. End Function
  138. ;-----------------------------------
  139. Function collided(xadd)
  140. Local x, y, collision=False
  141.         shifter=shifter + xadd
  142.         If shifter>-1           ;shifting left or right?
  143.                 For y=currentrow To currentrow+3
  144.                         If (currentbrick(rotation,y-currentrow) Shl shifter) And leveldata(y) Then collision=True
  145.                 Next
  146.         Else
  147.                 For y=currentrow To currentrow+3
  148.                         If (currentbrick(rotation,y-currentrow) Shr (shifter*-1)) And leveldata(y) Then collision=True 
  149.                 Next
  150.         EndIf
  151.         If collision Then shifter=shifter + (xadd * -1)
  152. Return collision
  153. End Function
  154. ;-----------------------------------
  155. Function draw_next_brick()
  156. Local x, y
  157.         For yloop=0 To 3 ;show next brick
  158.                 For square=0 To 3
  159.                         If nextcolourbrick(square,yloop) > EMPTYSQUARE
  160.                                 DrawBlock tiles,220+(square Shl 4),20+(yloop Shl 4),nextcolourbrick(square,yloop)
  161.                         Else
  162.                                 DrawBlock empty,220+(square Shl 4),20+(yloop Shl 4)
  163.                         EndIf
  164.                 Next
  165.         Next
  166.         action=action Or REDRAW
  167. Return
  168. End Function
  169. ;-----------------------------------
  170. Function draw_play_area()
  171. Local row, column
  172.         For row=2 To 21 ;draw the current level data to the screen
  173.                 For column=0 To 9
  174.                         If colourlevel(column,row) > EMPTYSQUARE
  175.                                 DrawBlock tiles,32+(column Shl 4),(row-2) Shl 4,colourlevel(column,row)
  176.                         Else
  177.                                 DrawBlock empty,32+(column Shl 4),(row-2) Shl 4
  178.                         EndIf
  179.                 Next
  180.         Next
  181. Return
  182. End Function
  183. ;-----------------------------------
  184. Function draw_score()
  185. Local x
  186.         For x=0 To 3
  187.                 DrawBlock empty,220+(x Shl 4),112
  188.         Next
  189.         For x=0 To 3
  190.                 DrawBlock empty,220+(x Shl 4),162
  191.         Next
  192.         Text 222,113,numlines
  193.         Text 222,163,score
  194. Return
  195. End Function
  196. ;-----------------------------------
  197. Function draw_title()
  198. Local row, column, tilenumber
  199.         Restore title3ff
  200.         For row=2 To 21
  201.                 Read tilenumber
  202.                 For column=0 To 9
  203.                         If tilenumber
  204.                                 Read colourlevel(column,row)
  205.                         Else
  206.                                 colourlevel(column,row)=EMPTYSQUARE
  207.                         EndIf
  208.                 Next
  209.         Next
  210.         draw_play_area()
  211.         Text 112,192,"Harlequin Software",True
  212.         Text 112,208,VERSION$,True
  213. Return
  214. End Function
  215. ;-----------------------------------
  216. Function game_over_man()
  217. Local x,y, rgb, r, g, b
  218.         xor_colour(True)
  219.         LockBuffer BackBuffer()
  220.         For y=136 To 167
  221.                 For x=48 To 175
  222.                         rgb=ReadPixelFast(x,y) And $FFFFFF
  223.                         r=rgb Shr 16
  224.                         g=(rgb Shr 8) And $FF
  225.                         b=rgb And $FF
  226.                         r=r Shr 1
  227.                         g=g Shr 1
  228.                         b=b Shr 1
  229.                         WritePixelFast x,y,(r Shl 16) Or (g Shl 8) Or b
  230.                 Next
  231.         Next
  232.         UnlockBuffer BackBuffer()
  233.         Text 112,146,"GAME OVER!",True
  234.         Rect 47,135,130,34,False
  235.         Flip False
  236.         Repeat
  237.                 Delay 1
  238.         Until KeyHit(ENTER) Or KeyHit(ESCAPE)
  239.         FlushKeys()
  240. Return
  241. End Function
  242. ;-----------------------------------
  243. Function get_a_brick()
  244. Local randbrick, rownumber
  245.         currentrow=startrow     ;startrow is next brick's start row
  246.         randbrick=Rand(0,6)
  247.         Select randbrick
  248.                 Case 0 Restore column
  249.                 Case 1 Restore L
  250.                 Case 2 Restore r
  251.                 Case 3 Restore cube
  252.                 Case 4 Restore T
  253.                 Case 5 Restore Z
  254.                 Case 6 Restore S
  255.         End Select
  256.         startrow=(randbrick > 2)
  257.         ;startrow depends on height of brick
  258.         For rownumber=0 To 3
  259.                 For rotation=0 To 3
  260.                         currentbrick(rotation,rownumber)=nextbrick(rotation,rownumber)
  261.                         Read nextbrick(rotation,rownumber)
  262.                 Next
  263.         Next
  264.         For rownumber=0 To 3
  265.                 For rotation=0 To 15
  266.                         colourbrick(rotation,rownumber)=nextcolourbrick(rotation,rownumber)
  267.                         Read nextcolourbrick(rotation,rownumber)
  268.                 Next
  269.         Next
  270.         rotation=0
  271.         shifter=0
  272.         If collided(0) Then action=action Or GAMEOVER Else draw_next_brick()
  273. Return
  274. End Function
  275. ;-----------------------------------
  276. Function init()
  277. Local tilenumber, i, x, y, w, help$, error, r, g, b, highlight
  278.         SetBuffer ImageBuffer(empty)
  279.         ClsColor 32,32,32
  280.         Cls
  281.         Color 64,64,64
  282.         Text 3,1,"0"
  283.         Restore brickcolours
  284.         For bricknum=0 To 6
  285.                 Read r,g,b
  286.                 For tilenumber=0 To 15
  287.                         SetBuffer ImageBuffer(tiles,tilenumber+(bricknum Shl 4))
  288.                         ClsColor r,g,b
  289.                         Cls
  290.                 Next
  291.                 ;lowlights
  292.                 For tilenumber=0 To 15
  293.                         SetBuffer ImageBuffer(tiles,tilenumber+(bricknum Shl 4))
  294.                         Color r Shr 1, g Shr 1, b Shr 1
  295.                         If Not(tilenumber And 8) Then Line 0,0,0,15
  296.                         If Not(tilenumber And 4) Then Line 0,15,15,15
  297.                 Next
  298.                 r=r Shl 1
  299.                 If r>255 Then r=255
  300.                 g=g Shl 1
  301.                 If g>255 Then g=255
  302.                 b=b Shl 1
  303.                 If b>255 Then b=255
  304.                 ;hightlights
  305.                 For tilenumber=0 To 15
  306.                         SetBuffer ImageBuffer(tiles,tilenumber+(bricknum Shl 4))
  307.                         Color r,g,b
  308.                         Text 3,1,bricknum+1
  309.                         If Not(tilenumber And 1) Then Line 0,0,15,0
  310.                         If Not(tilenumber And 2) Then Line 15,0,15,15
  311.                 Next
  312.         Next
  313.         SetBuffer BackBuffer()
  314.         Color 192,164,0
  315.         For y=0 To 5
  316.                 Read help$
  317.                 Text 210,188+(26 * y),help$
  318.         Next
  319.         Color 128,96,0
  320.         For y=0 To 5
  321.                 Read help$
  322.                 Text 220,201+(26 * y),help$
  323.         Next
  324.         Color 255,255,255
  325.         Text 220,90,"Lines:"
  326.         Text 220,140,"Score:"
  327. Return
  328. End Function
  329. ;-----------------------------------
  330. Function join_bricks()
  331. Local row, column, firsttile, adjacents
  332. ;this function originaly checked all 20 rows (2-21) - but only a maximum 6 rows can be affected by any given brick
  333. ;unfortunately, that means I now have to test that the row number isn't less than 2, or greater than 21 - but
  334. ;it's a small overhead considering we are no longer checking all 20 rows of the play area.
  335.         For row=currentrow-1 To currentrow+4
  336.                 If row > 1      ;would cause array index out of bounds if at top of level if less than 2
  337.                         If leveldata(row) And FULLVISIBLE
  338.                                 For column=0 To 9
  339.                                         adjacents=0
  340.                                         If row<22       ;hidden row off bottom - don't check it
  341.                                                 If colourlevel(column,row) > EMPTYSQUARE
  342.                                                         firsttile=(colourlevel(column,row) And $F0) ;first tile of that colour
  343.                                                         If column > 0
  344.                                                                 If colourlevel(column-1,row) > EMPTYSQUARE
  345.                                                                         If (colourlevel(column-1,row) And $F0)=firsttile Then adjacents=SAMEWEST
  346.                                                                 EndIf
  347.                                                         EndIf
  348.                                                         If column < 9
  349.                                                                 If colourlevel(column+1,row) > EMPTYSQUARE
  350.                                                                         If (colourlevel(column+1,row) And $F0)=firsttile Then adjacents=adjacents Or SAMEEAST
  351.                                                                 EndIf
  352.                                                         EndIf
  353.                                                         If row < 21
  354.                                                                 If colourlevel(column,row+1) > EMPTYSQUARE
  355.                                                                         If (colourlevel(column,row+1) And $F0)=firsttile Then adjacents=adjacents Or SAMESOUTH
  356.                                                                 EndIf
  357.                                                         EndIf
  358.                                                         If colourlevel(column,row-1) > EMPTYSQUARE
  359.                                                                 If (colourlevel(column,row-1) And $F0)=firsttile Then adjacents=adjacents Or SAMENORTH
  360.                                                         EndIf
  361.                                                         colourlevel(column,row)=firsttile+adjacents
  362.                                                 EndIf
  363.                                         EndIf
  364.                                 Next
  365.                         EndIf
  366.                 EndIf
  367.         Next
  368. Return
  369. End Function
  370. ;-----------------------------------
  371. Function move_brick(xadd)
  372.         xor_brick(ERASECOLOUR)
  373.         If collided(xadd)
  374.                 xor_brick(ADDCOLOUR)
  375.         Else
  376.                 action=action Or REDRAW
  377.         EndIf
  378. Return
  379. End Function
  380. ;-----------------------------------
  381. Function move_down()
  382. Local newlines, rownumber, column, row, emptyrows, n, square
  383.         xor_brick(ERASECOLOUR)
  384.         currentrow=currentrow+1
  385.         If collided(0)
  386.                 newlines=0
  387.                 action=action Or LANDED
  388.                 currentrow=currentrow-1
  389.                 xor_brick(ADDCOLOUR)
  390.                 For row=0 To 3
  391.                         For column=0 To 3
  392.                                 If colourbrick((rotation Shl 2)+column,row) > EMPTYSQUARE
  393.                                         colourlevel(column+3-shifter,currentrow+row)=colourbrick((rotation Shl 2)+column,row)
  394.                                 EndIf
  395.                         Next
  396.                 Next
  397.                 For rownumber=currentrow To currentrow+3
  398.                         If leveldata(rownumber)=FULLROW
  399.                                 newlines=newlines+1
  400.                                 lines(rownumber-currentrow)=rownumber
  401.                                 currentbrick(rotation,rownumber-currentrow)=0
  402.                                 leveldata(rownumber)=EMPTYROW
  403.                         EndIf
  404.                 Next
  405.                 If newlines
  406.                         score=score+(newlines*10) + (((newlines-1)*0.5)*(newlines*10))
  407. ;                       Select newlines
  408. ;                               Case 1 PlaySound(line1snd)
  409. ;                               Case 2 PlaySound(line2snd)
  410. ;                               Case 3 PlaySound(line3snd)
  411. ;                               Case 4 PlaySound(line4snd)
  412. ;                       End Select
  413.                         For column=0 To 9
  414.                                 For row=0 To 3
  415.                                         If lines(row)
  416.                                                 For square=0 To 9-column
  417.                                                         If lines(row) And 1
  418.                                                                 If column=9
  419.                                                                         colourlevel(0,lines(row))=EMPTYSQUARE
  420.                                                                 Else
  421.                                                                         If square=9
  422.                                                                                 colourlevel(9,lines(row))=EMPTYSQUARE
  423.                                                                         Else
  424.                                                                                 colourlevel(square,lines(row))=colourlevel(square+1,lines(row))
  425.                                                                         EndIf
  426.                                                                 EndIf
  427.                                                         Else
  428.                                                                 If column=9
  429.                                                                         colourlevel(9,lines(row))=EMPTYSQUARE
  430.                                                                 Else
  431.                                                                         If square=9
  432.                                                                                 colourlevel(0,lines(row))=EMPTYSQUARE
  433.                                                                         Else
  434.                                                                                 colourlevel(9-square,lines(row))=colourlevel(8-square,lines(row))
  435.                                                                         EndIf
  436.                                                                 EndIf
  437.                                                         EndIf
  438.                                                 Next
  439.                                         EndIf
  440.                                 Next
  441.                                 join_bricks()
  442.                                 draw_play_area()
  443.                                 Delay 30: Flip False
  444.                         Next
  445.                         Delay 50
  446.                         For row=0 To 3
  447.                                 lines(row)=0
  448.                         Next
  449.                         For column=0 To newlines
  450.                                 For row=currentrow+3 To 1 Step-1
  451.                                         If leveldata(row)=EMPTYROW And leveldata(row-1)>EMPTYROW
  452.                                                 leveldata(row)=leveldata(row-1)
  453.                                                 leveldata(row-1)=EMPTYROW
  454.                                                 For square=0 To 9
  455.                                                         colourlevel(square,row)=colourlevel(square,row-1)
  456.                                                         colourlevel(square,row-1)=EMPTYSQUARE
  457.                                                 Next
  458.                                         EndIf
  459.                                 Next
  460.                                 draw_play_area()
  461.                                 Delay 30: Flip False
  462.                         Next
  463.                         n=numlines+newlines
  464.                         If (n -(n Mod 10)) > (numlines-(numlines Mod 10)) Then speed=speed-(speed * 0.1)
  465.                         ;speed + 10% every 10 lines
  466.                         numlines=numlines+newlines
  467.                         draw_score()
  468. ;               Else
  469. ;                       PlaySound(landsnd)
  470.                 EndIf
  471.                 join_bricks()
  472.                 draw_play_area()
  473.                 Flip False
  474.         Else
  475.                 action=action Or REDRAW
  476.         EndIf
  477. Return
  478. End Function
  479. ;-----------------------------------
  480. Function pause()
  481. Local oldtime, x, y
  482.         oldtime=MilliSecs()-time
  483.         For y=0 To 19
  484.                 For x=2 To 11
  485.                         DrawBlock empty,x Shl 4,y Shl 4
  486.                 Next
  487.         Next
  488.         Text(112,147,"PAUSED",True)
  489.         Flip False
  490.         Repeat
  491.                 Delay 1
  492.                 If KeyHit(ESCAPE) Then action=action Or ESCAPED
  493.         Until KeyHit(SPACEBAR) Or (action And ESCAPED)
  494.         FlushKeys()
  495.         If Not(action And ESCAPED)
  496.                 draw_play_area()
  497.                 draw_next_brick()
  498.                 xor_colour(ADDCOLOUR)
  499.                 Flip False
  500.                 action=action And DRAWN
  501.                 time=MilliSecs()-oldtime
  502.         EndIf
  503. Return
  504. End Function
  505. ;-----------------------------------
  506. Function rotate_brick(modifier)
  507. Local oldrotation
  508.         xor_brick(ERASECOLOUR)
  509.         oldrotation=rotation
  510.         rotation=rotation + modifier
  511.         If rotation > 3 Then rotation=0 ElseIf rotation < 0 Then rotation=3
  512.         If collided(0)
  513.                 If shift_collided()
  514.                         rotation=oldrotation
  515.                         xor_brick(ADDCOLOUR)
  516.                 Else
  517.                         action=action Or REDRAW
  518.                 EndIf
  519.         Else
  520.                 action=action Or REDRAW
  521.         EndIf
  522. Return
  523. End Function
  524. ;-----------------------------------
  525. Function shift_collided()
  526. ;rotation caused a collision - can we shift brick sideways?
  527.         If collided(-1)
  528.                 If collided(1)
  529.                         If collided(-2)
  530.                                 Return collided(2)
  531.                         EndIf
  532.                 EndIf
  533.         EndIf
  534. Return False
  535. End Function
  536. ;-----------------------------------
  537. Function xor_brick(drawcolour)
  538. Local y
  539.         xor_colour(drawcolour)
  540.         If shifter>-1
  541.                 For y=currentrow To currentrow+3
  542.                         leveldata(y) = (leveldata(y)) Xor currentbrick(rotation,y-currentrow) Shl shifter
  543.                 Next
  544.         Else
  545.                 For y=currentrow To currentrow+3
  546.                         leveldata(y) = (leveldata(y)) Xor currentbrick(rotation,y-currentrow) Shr (shifter*-1)
  547.                 Next
  548.         EndIf
  549. Return
  550. End Function
  551. ;-----------------------------------
  552. Function xor_colour(draw)
  553. Local row, column
  554.         For row=0 To 3
  555.                 For column=0 To 3
  556.                         If colourbrick((rotation Shl 2)+column,row) > EMPTYSQUARE
  557.                                 If draw
  558.                                         DrawBlock tiles,80+(shifter * -16)+(column Shl 4),(currentrow+row-2) Shl 4,colourbrick((rotation Shl 2)+column,row)
  559.                                 Else
  560.                                         DrawBlock empty,80+(shifter * -16)+(column Shl 4),(currentrow+row-2) Shl 4
  561.                                 EndIf
  562.                         EndIf
  563.                 Next
  564.         Next
  565. Return
  566. End Function
  567. ;-----------------------------------
  568. .brickcolours
  569. Data 88,80,192          ;blue
  570. Data 220,174,132        ;tan
  571. Data 108,162,196        ;light blue
  572. Data 145,98,200         ;lilac
  573. Data 140,166,100        ;green
  574. Data 188,186,4          ;yellow
  575. Data 156,94,92          ;terracotta
  576. Data "Play:","Move:","Rotate right:","Rotate left:","Pause:","Quit:"
  577. Data "Enter","Cursor keys","Up-arrow","L-Ctrl","Spacebar","Escape"
  578. .title3ff
  579. Data 0,0
  580. Data 1,$2,$A,$A,$A,$A,$A,$A,$A,$A,$8                    ;RULE
  581. Data 0
  582. Data 1,-1, $32,$3C, -1,$36,$38, -1,$36,$38,-1   ;3FF
  583. Data 1,-1, -1,$35,  -1,$35,-1,  -1,$35,-1, -1
  584. Data 1,-1, $32,$3D, -1,$37,$38, -1,$37,$38,-1
  585. Data 1,-1, -1,$35,  -1,$35,-1,  -1,$35,-1,-1
  586. Data 1,-1, $32,$39, -1,$31,-1,  -1,$31,-1,-1
  587. Data 0
  588. Data 1,$2,$A,$A,$A,$A,$A,$A,$A,$A,$8                    ;RULE
  589. Data 0,0,0,0,0,0,0,0,0
  590. ;brickpatterns
  591. .column
  592. ;binary brick
  593. Data $40,$00,$40,$00, $40,$00,$40,$00, $40,$F0,$40,$F0, $40,$00,$40,$00
  594. ;colour brick
  595. Data -1,$4,-1,-1, -1,-1,-1,-1, -1,$4,-1,-1, -1,-1,-1,-1
  596. Data -1,$5,-1,-1, -1,-1,-1,-1, -1,$5,-1,-1, -1,-1,-1,-1
  597. Data -1,$5,-1,-1, $2,$A,$A,$8, -1,$5,-1,-1, $2,$A,$A,$8
  598. Data -1,$1,-1,-1, -1,-1,-1,-1, -1,$1,-1,-1, -1,-1,-1,-1
  599. .T
  600. ;binary brick
  601. Data $00,$00,$00,$00, $40,$40,$00,$40, $E0,$60,$E0,$C0, $00,$40,$40,$40
  602. ;colour brick
  603. Data -1,-1,-1,-1,    -1,-1,-1,-1,   -1,-1,-1,-1,    -1,-1,-1,-1
  604. Data -1,$44,-1,-1,   -1,$44,-1,-1,  -1,-1,-1,-1,    -1,$44,-1,-1
  605. Data $42,$4B,$48,-1, -1,$47,$48,-1, $42,$4E,$48,-1, $42,$4D,-1,-1
  606. Data -1,-1,-1,-1,    -1,$41,-1,-1,  -1,$41,-1,-1,   -1,$41,-1,-1
  607. .cube
  608. ;binary brick
  609. Data $00,$00,$00,$00, $60,$60,$60,$60, $60,$60,$60,$60, $00,$00,$00,$00
  610. ;colour brick
  611. Data -1,-1,-1,-1,   -1,-1,-1,-1,   -1,-1,-1,-1,   -1,-1,-1,-1
  612. Data -1,$36,$3C,-1, -1,$36,$3C,-1, -1,$36,$3C,-1, -1,$36,$3C,-1
  613. Data -1,$33,$39,-1, -1,$33,$39,-1, -1,$33,$39,-1, -1,$33,$39,-1
  614. Data -1,-1,-1,-1,   -1,-1,-1,-1,   -1,-1,-1,-1,   -1,-1,-1,-1
  615. .r
  616. ;binary brick
  617. Data $00,$00,$00,$00,$20,$40,$30,$00,$20,$70,$20,$70,$60,$00,$20,$10
  618. ;colour brick
  619. Data -1,-1,-1,-1,   -1,-1,-1,-1,    -1,-1,-1,-1,   -1,-1,-1,-1
  620. Data -1,-1,$24,-1,  -1,$24,-1,-1,   -1,-1,$26,$28, -1,-1,-1,-1
  621. Data -1,-1,$25,-1,  -1,$23,$2A,$28, -1,-1,$25,-1,  -1,$22,$2A,$2C
  622. Data -1,$22,$29,-1, -1,-1,-1,-1,    -1,-1,$21,-1,  -1,-1,-1,$21
  623. .L
  624. ;binary brick
  625. Data $00,$00,$00,$00,$40,$00,$C0,$20,$40,$E0,$40,$E0,$60,$80,$40,$00
  626. ;colour brick
  627. Data -1,-1,-1,-1,   -1,-1,-1,-1,    -1,-1,-1,-1,   -1,-1,-1,-1
  628. Data -1,$14,-1,-1,  -1,-1,-1,-1,    $12,$1C,-1,-1, -1,-1,$14,-1
  629. Data -1,$15,-1,-1,  $16,$1A,$18,-1, -1,$15,-1,-1,  $12,$1A,$19,-1
  630. Data -1,$13,$18,-1, $11,-1,-1,-1,   -1,$11,-1,-1,  -1,-1,-1,-1
  631. .Z
  632. ;binary brick
  633. Data $00,$00,$00,$00, $C0,$20,$C0,$20, $60,$60,$60,$60, $00,$40,$00,$40
  634. ;colour brick
  635. Data -1,-1,-1,-1,   -1,-1,-1,-1,   -1,-1,-1,-1,   -1,-1,-1,-1
  636. Data $52,$5C,-1,-1, -1,-1,$54,-1,  $52,$5C,-1,-1, -1,-1,$54,-1
  637. Data -1,$53,$58,-1, -1,$56,$59,-1, -1,$53,$58,-1, -1,$56,$59,-1
  638. Data -1,-1,-1,-1,   -1,$51,-1,-1,  -1,-1,-1,-1,   -1,$51,-1,-1
  639. .S
  640. ;binary brick
  641. Data $00,$00,$00,$00, $60,$40,$60,$40, $C0,$60,$C0,$60, $00,$20,$00,$20
  642. ;colour brick
  643. Data -1,-1,-1,-1,   -1,-1,-1,-1,    -1,-1,-1,-1,   -1,-1,-1,-1
  644. Data -1,$66,$68,-1, -1,$64,-1,-1,   -1,$66,$68,-1, -1,$64,-1,-1
  645. Data $62,$69,-1,-1, -1,$63,$6C,-1,  $62,$69,-1,-1, -1,$63,$6C,-1
  646. Data -1,-1,-1,-1,   -1,-1,$61,-1,   -1,-1,-1,-1,   -1,-1,$61,-1


Comments :


Vic 3 Babes(Posted 1+ years ago)

 Note - due to the discovery of a bug in BlitzPlus's Random Number Generator after posting the above code, you should add a Default to the Select clause that picks a random brick - something along the lines of:RunTimeError "Random number generated outside specified range"Problem current as of 07 February 2007I suppose that good programming practice demands that you should always have a default clause to trap errors, but who knew.


Clyde(Posted 1+ years ago)

 Welldone Vic 3 Babes :)


 

SimplePortal 2.3.6 © 2008-2014, SimplePortal