Home

Add

Edit

Without Linenumbers

Code in Textfield

Download

  1. '##########################################################################################################################################
    
  2. Dim Shared G_ScreenW As Integer = 440
    
  3. Dim Shared G_ScreenH As Integer = 440
    
  4. 
    
  5. 
    
  6. 
    
  7. '##########################################################################################################################################
    
  8. Dim Shared G_NetD(1 To 4, 1 To 4) As Integer
    
  9. Dim Shared G_NetN(1 To 4, 1 To 4) As Integer
    
  10. Dim Shared G_NetM(1 To 4, 1 To 4) As Integer
    
  11. Dim Shared G_AnimZ As Integer
    
  12. Dim Shared G_AnimS As Integer
    
  13. Dim Shared G_Score As Integer
    
  14. Dim Shared G_GameMode As Integer = 1
    
  15. Dim Shared G_GameEnd As Integer = 1
    
  16. 
    
  17. 
    
  18. 
    
  19. '##########################################################################################################################################
    
  20. Function Net_RndAdd(V_SetMy As Integer) As Integer
    
  21. Dim C As Integer
    
  22. For Y As Integer = 1 To 4
    
  23.     For X As Integer = 1 To 4
    
  24.         If G_NetD(Y, X) = 0 Then C += 1
    
  25.     Next
    
  26. Next
    
  27. Dim Z As Integer = Int((Rnd * C) + 1)
    
  28. C = 0
    
  29. For Y As Integer = 1 To 4
    
  30.     For X As Integer = 1 To 4
    
  31.         If G_NetD(Y, X) = 0 Then C += 1
    
  32.         If C = Z Then
    
  33.             G_NetD(Y, X) = (2 ^ Int(Rnd * 2))
    
  34.             Return 1
    
  35.         End If
    
  36.     Next
    
  37. Next
    
  38. Return 0
    
  39. End Function
    
  40. 
    
  41. 
    
  42. 
    
  43. '##########################################################################################################################################
    
  44. Sub DrawNums(V_PosX As Integer, V_PosY As Integer, V_Size As Integer, V_Color As Uinteger, V_Num As Integer)
    
  45. Dim V As Integer
    
  46. Dim S As String = Str(V_Num)
    
  47. Dim TX As Integer
    
  48. Dim TFW As Integer = V_Size / 2
    
  49. For Z As Integer = 0 To Len(S) - 1
    
  50.     If (Len(S) Mod 2) = 0 Then
    
  51.         TX = V_PosX + TFW - ((Fix(Len(S) / 2) - Z) * V_Size)
    
  52.     Else: TX = V_PosX - ((Fix(Len(S) / 2) - Z) * V_Size)
    
  53.     End If
    
  54.     V = S[Z] - 48
    
  55.     Select Case V
    
  56.         Case 0, 4, 5, 6, 8, 9           : Line (TX - TFW + 4, V_PosY - TFW - 1)-(TX - TFW + 3, V_PosY), V_Color, BF
    
  57.     End Select
    
  58.     Select Case V
    
  59.         Case 0, 2, 6, 8                 : Line (TX - TFW + 4, V_PosY + TFW + 1)-(TX - TFW + 3, V_PosY), V_Color, BF
    
  60.     End Select
    
  61.     Select Case V
    
  62.         Case 0, 1, 2, 3, 4, 7, 8, 9     : Line (TX + TFW - 4, V_PosY - TFW - 1)-(TX + TFW - 3, V_PosY), V_Color, BF
    
  63.     End Select
    
  64.     Select Case V
    
  65.         Case 0, 1, 3, 4, 5, 6, 7, 8, 9  : Line (TX + TFW - 4, V_PosY + TFW + 1)-(TX + TFW - 3, V_PosY), V_Color, BF
    
  66.     End Select
    
  67.     Select Case V
    
  68.         Case 0, 2, 3, 5, 6, 7, 8, 9     : Line (TX - TFW + 4, V_PosY - TFW - 1)-(TX + TFW - 3, V_PosY - TFW), V_Color, BF
    
  69.     End Select
    
  70.     Select Case V
    
  71.         Case 2, 3, 4, 5, 6, 8, 9        : Line (TX - TFW + 4, V_PosY - 1)-(TX + TFW - 3, V_PosY), V_Color, BF
    
  72.     End Select
    
  73.     Select Case V
    
  74.         Case 0, 2, 3, 5, 6, 8, 9        : Line (TX - TFW + 4, V_PosY + TFW + 1)-(TX + TFW - 3, V_PosY + TFW), V_Color, BF
    
  75.     End Select
    
  76. Next
    
  77. End Sub
    
  78. 
    
  79. 
    
  80. 
    
  81. '##########################################################################################################################################
    
  82. Function GetCol(V_Value As Integer) As Uinteger
    
  83. Select Case V_Value
    
  84.     Case 1              : Return &HFF00EADA
    
  85.     Case 2              : Return &HFF00EA94
    
  86.     Case 4, 3           : Return &HFF00EA3B
    
  87.     Case 8, 6           : Return &HFF27EA00
    
  88.     Case 16, 12         : Return &HFF72EA08
    
  89.     Case 32, 24         : Return &HFFAEEA09
    
  90.     Case 64, 48         : Return &HFFD2E100
    
  91.     Case 128, 96        : Return &HFFFFCC00
    
  92.     Case 256, 192       : Return &HFFFFA200
    
  93.     Case 512, 384       : Return &HFFFF6A00
    
  94.     Case 1024, 768      : Return &HFFFF2B00
    
  95.     Case 2048, 1536     : Return &HFFE00000
    
  96.     Case 4096, 3072     : Return &HFFE0234F
    
  97.     Case 8192, 6144     : Return &HFFE02692
    
  98.     Case 16384, 12288   : Return &HFFD12BBE
    
  99.     Case 32768, 24376   : Return &HFFD72DEA
    
  100. End Select
    
  101. End Function
    
  102. 
    
  103. 
    
  104. 
    
  105. '##########################################################################################################################################
    
  106. Sub Redraw()
    
  107. Dim X As Integer
    
  108. Dim Y As Integer
    
  109. Dim Z As Integer
    
  110. Dim V As Integer
    
  111. Dim C As Integer
    
  112. Dim S As String
    
  113. Dim TW As Integer = G_ScreenW / 4
    
  114. Dim TH As Integer = G_ScreenH / 4
    
  115. Dim TB As Integer = 3
    
  116. Dim TCol As Uinteger
    
  117. Dim TAX As Integer
    
  118. Dim TAY As Integer
    
  119. Screenlock()
    
  120. Line (0, 0)-(G_ScreenW, G_ScreenH), &HFF999999, BF
    
  121. For Y = 1 To 4
    
  122.     For X = 1 To 4
    
  123.         Line((X - 1) * TW + TB, (Y - 1) * TH + TB)-(X * TW - TB, Y * TH - TB), &HFFFFFFFF, BF
    
  124.         If G_NetD(X, Y) <> 0 Then
    
  125.             If G_NetM(X, Y) = 0 Then
    
  126.                 TCol = GetCol(G_NetD(X, Y))
    
  127.                 Line(TAX + (X - 1) * TW + TB, TAY + (Y - 1) * TH + TB)-(TAX + X * TW - TB, TAY + Y * TH - TB), TCol, BF
    
  128.                 DrawNums(TAX + X * TW - TW / 2, TAY + Y * TW - TH / 2, 20, &HFF000000, G_NetD(X, Y))
    
  129.             End If
    
  130.         End If
    
  131.         Line((X - 1) * TW + TB, (Y - 1) * TH + TB)-(X * TW - TB, Y * TH - TB), &HFF666666, B
    
  132.     Next
    
  133. Next
    
  134. For Y = 1 To 4
    
  135.     For X = 1 To 4
    
  136.         If G_NetM(X, Y) <> 0 Then
    
  137.             TCol = GetCol(G_NetD(X, Y))
    
  138.             TAX = 0
    
  139.             TAY = 0
    
  140.             If G_NetM(X, Y) <> 0 Then
    
  141.                 Select Case G_NetM(X, Y)
    
  142.                     Case 1: TAY = -G_AnimZ
    
  143.                     Case 2: TAY = G_AnimZ
    
  144.                     Case 3: TAX = -G_AnimZ
    
  145.                     Case 4: TAX = G_AnimZ
    
  146.                 End Select
    
  147.             End If
    
  148.             Line(TAX + (X - 1) * TW + TB, TAY + (Y - 1) * TH + TB)-(TAX + X * TW - TB, TAY + Y * TH - TB), TCol, BF
    
  149.             DrawNums(TAX + X * TW - TW / 2, TAY + Y * TW - TH / 2, 20, &HFF000000, G_NetD(X, Y))
    
  150.             Line(TAX + (X - 1) * TW + TB, TAY + (Y - 1) * TH + TB)-(TAX + X * TW - TB, TAY + Y * TH - TB), &HFF666666, B
    
  151.         End If
    
  152.     Next
    
  153. Next
    
  154. If G_GameEnd <> 0 Then
    
  155.     Line (50, G_ScreenH / 2 - 60)-(G_ScreenW - 50, G_ScreenH / 2 + 60), &HFFB9BFFF, BF
    
  156.     Select Case G_GameEnd
    
  157.         Case 1
    
  158.             X = 1: S = "n e t i c a"
    
  159.             Draw String (G_ScreenW / 2 - (Len(S) * 4), G_ScreenH / 2 - 60 + (X * 10)), S, &HFF000000
    
  160.             X = 3: S = "V:1.00.0"
    
  161.             Draw String (G_ScreenW / 2 - (Len(S) * 4), G_ScreenH / 2 - 60 + (X * 10)), S, &HFF000000
    
  162.             X = 4: S = "freebasic@deltalabs.de"
    
  163.             Draw String (G_ScreenW / 2 - (Len(S) * 4), G_ScreenH / 2 - 60 + (X * 10)), S, &HFF000000
    
  164.             X = 6: S = " ESC = Exit"
    
  165.             Draw String (G_ScreenW / 2 - (Len(S) * 4), G_ScreenH / 2 - 60 + (X * 10)), S, &HFF000000
    
  166.             X = 7: S = "     ARROW-Keys = Move the stones"
    
  167.             Draw String (G_ScreenW / 2 - (Len(S) * 4), G_ScreenH / 2 - 60 + (X * 10)), S, &HFF000000
    
  168.             X = 8: S = "         ENTER = Start new game"
    
  169.             Draw String (G_ScreenW / 2 - (Len(S) * 4), G_ScreenH / 2 - 60 + (X * 10)), S, &HFF000000
    
  170.             X = 9: S = "              m = Change PlayMode"
    
  171.             Draw String (G_ScreenW / 2 - (Len(S) * 4), G_ScreenH / 2 - 60 + (X * 10)), S, &HFF000000
    
  172.             X = 10
    
  173.             S = "PlayMode: "
    
  174.             Select Case G_GameMode
    
  175.                 Case 0: S += "Step-By-Step"
    
  176.                 Case 1: S += "ToWall"
    
  177.                 Case 2: S += "123,6"
    
  178.             End Select
    
  179.             Draw String (G_ScreenW / 2 - (Len(S) * 4), G_ScreenH / 2 - 50 + (X * 10)), S, &HFF000000
    
  180.             
    
  181.         Case 2
    
  182.             X = 1: S = "n e t i c a"
    
  183.             Draw String (G_ScreenW / 2 - (Len(S) * 4), G_ScreenH / 2 - 60 + (X * 10)), S, &HFF000000
    
  184.             X = 4: S = "YEAH!!!"
    
  185.             Draw String (G_ScreenW / 2 - (Len(S) * 4), G_ScreenH / 2 - 60 + (X * 10)), S, &HFF000000
    
  186.             X = 6: S = "this is your score:"
    
  187.             Draw String (G_ScreenW / 2 - (Len(S) * 4), G_ScreenH / 2 - 60 + (X * 10)), S, &HFF000000
    
  188.             X = 9
    
  189.             DrawNums(G_ScreenW / 2, G_ScreenH / 2 - 60 + (X * 10), 20, &HFF000000, G_Score)
    
  190.             
    
  191.     End Select
    
  192.     Line (50, G_ScreenH / 2 - 60)-(G_ScreenW - 50, G_ScreenH / 2 + 60), &HFF000000, B
    
  193.     Line (50 - 1, G_ScreenH / 2 - 60 - 1)-(G_ScreenW - 50 + 1, G_ScreenH / 2 + 60 + 1), &HFFFFFFFF, B
    
  194. End If
    
  195. Screenunlock()
    
  196. End Sub
    
  197. 
    
  198. 
    
  199. 
    
  200. '##########################################################################################################################################
    
  201. Sub CheckClear()
    
  202. Dim X As Integer
    
  203. Dim Y As Integer
    
  204. For Y = 1 To 4
    
  205.     For X = 1 To 4
    
  206.         G_NetM(X, Y) = 0
    
  207.         G_NetN(X, Y) = 0
    
  208.     Next
    
  209. Next
    
  210. End Sub
    
  211. 
    
  212. 
    
  213. 
    
  214. '##########################################################################################################################################
    
  215. Function CheckDo1(V_Direction As Integer, V_GameMode As Integer) As Integer
    
  216. Dim TRV As Integer
    
  217. Dim X As Integer
    
  218. Dim Y As Integer
    
  219. Select Case V_Direction
    
  220.     Case 1 'U
    
  221.         For Y = 1 To 4
    
  222.             For X = 1 To 4
    
  223.                 If Y = 1 Then G_NetN(X, Y) = G_NetD(X, Y): Continue For
    
  224.                 If G_NetD(X, Y) = 0 Then Continue For
    
  225.                 If G_NetN(X, Y - 1) = 0 Then
    
  226.                     G_NetN(X, Y - 1) = G_NetD(X, Y)
    
  227.                     G_NetM(X, Y) = V_Direction
    
  228.                     TRV = 1
    
  229.                     Continue For
    
  230.                 Elseif (V_GameMode = 2) And ((G_NetN(X, Y - 1) + G_NetD(X, Y)) <= 4) Then
    
  231.                     If ((G_NetN(X, Y - 1) + G_NetD(X, Y)) <> 3) Then G_NetN(X, Y) = G_NetD(X, Y): Continue For
    
  232.                     G_NetN(X, Y - 1) = 3
    
  233.                     G_NetM(X, Y) = V_Direction
    
  234.                     TRV = G_NetN(X, Y - 1)
    
  235.                     Continue For
    
  236.                 Elseif G_NetN(X, Y - 1) = G_NetD(X, Y) Then
    
  237.                     G_NetN(X, Y - 1) += G_NetD(X, Y)
    
  238.                     G_NetM(X, Y) = V_Direction
    
  239.                     TRV = G_NetN(X, Y - 1)
    
  240.                     Continue For
    
  241.                 Else: G_NetN(X, Y) = G_NetD(X, Y): Continue For
    
  242.                 End If
    
  243.             Next
    
  244.         Next
    
  245.         
    
  246.     Case 2 'D
    
  247.         For Y = 4 To 1 Step -1
    
  248.             For X = 1 To 4
    
  249.                 If Y = 4 Then G_NetN(X, Y) = G_NetD(X, Y): Continue For
    
  250.                 If G_NetD(X, Y) = 0 Then Continue For
    
  251.                 If G_NetN(X, Y + 1) = 0 Then
    
  252.                     G_NetN(X, Y + 1) = G_NetD(X, Y)
    
  253.                     G_NetM(X, Y) = V_Direction
    
  254.                     TRV = 1
    
  255.                     Continue For
    
  256.                 Elseif (V_GameMode = 2) And ((G_NetN(X, Y + 1) + G_NetD(X, Y)) <= 4) Then
    
  257.                     If ((G_NetN(X, Y + 1) + G_NetD(X, Y)) <> 3) Then G_NetN(X, Y) = G_NetD(X, Y): Continue For
    
  258.                     G_NetN(X, Y + 1) = 3
    
  259.                     G_NetM(X, Y) = V_Direction
    
  260.                     TRV = G_NetN(X, Y - 1)
    
  261.                     Continue For
    
  262.                 Elseif G_NetN(X, Y + 1) = G_NetD(X, Y) Then
    
  263.                     G_NetN(X, Y + 1) += G_NetD(X, Y)
    
  264.                     G_NetM(X, Y) = V_Direction
    
  265.                     TRV = G_NetN(X, Y + 1)
    
  266.                     Continue For
    
  267.                 Else: G_NetN(X, Y) = G_NetD(X, Y): Continue For
    
  268.                 End If
    
  269.             Next
    
  270.         Next
    
  271.         
    
  272.     Case 3 'L
    
  273.         For X = 1 To 4
    
  274.             For Y = 1 To 4
    
  275.                 If X = 1 Then G_NetN(X, Y) = G_NetD(X, Y): Continue For
    
  276.                 If G_NetD(X, Y) = 0 Then Continue For
    
  277.                 If G_NetN(X - 1, Y) = 0 Then
    
  278.                     G_NetN(X - 1, Y) = G_NetD(X, Y)
    
  279.                     G_NetM(X, Y) = V_Direction
    
  280.                     TRV = 1
    
  281.                     Continue For
    
  282.                 Elseif (V_GameMode = 2) And ((G_NetN(X - 1, Y) + G_NetD(X, Y)) <= 4) Then
    
  283.                     If ((G_NetN(X - 1, Y) + G_NetD(X, Y)) <> 3) Then G_NetN(X, Y) = G_NetD(X, Y): Continue For
    
  284.                     G_NetN(X - 1, Y) = 3
    
  285.                     G_NetM(X, Y) = V_Direction
    
  286.                     TRV = G_NetN(X, Y - 1)
    
  287.                     Continue For
    
  288.                 Elseif G_NetN(X - 1, Y) = G_NetD(X, Y) Then
    
  289.                     G_NetN(X - 1, Y) += G_NetD(X, Y)
    
  290.                     G_NetM(X, Y) = V_Direction
    
  291.                     TRV = G_NetN(X - 1, Y)
    
  292.                     Continue For
    
  293.                 Else: G_NetN(X, Y) = G_NetD(X, Y): Continue For
    
  294.                 End If
    
  295.             Next
    
  296.         Next
    
  297.         
    
  298.     Case 4 'R
    
  299.         For X = 4 To 1 Step -1
    
  300.             For Y = 1 To 4
    
  301.                 If X = 4 Then G_NetN(X, Y) = G_NetD(X, Y): Continue For
    
  302.                 If G_NetD(X, Y) = 0 Then Continue For
    
  303.                 If G_NetN(X + 1, Y) = 0 Then
    
  304.                     G_NetN(X + 1, Y) = G_NetD(X, Y)
    
  305.                     G_NetM(X, Y) = V_Direction
    
  306.                     TRV = 1
    
  307.                     Continue For
    
  308.                 Elseif (V_GameMode = 2) And ((G_NetN(X + 1, Y) + G_NetD(X, Y)) <= 4) Then
    
  309.                     If ((G_NetN(X + 1, Y) + G_NetD(X, Y)) <> 3) Then G_NetN(X, Y) = G_NetD(X, Y): Continue For
    
  310.                     G_NetN(X + 1, Y) = 3
    
  311.                     G_NetM(X, Y) = V_Direction
    
  312.                     TRV = G_NetN(X, Y - 1)
    
  313.                     Continue For
    
  314.                 Elseif G_NetN(X + 1, Y) = G_NetD(X, Y) Then
    
  315.                     G_NetN(X + 1, Y) += G_NetD(X, Y)
    
  316.                     G_NetM(X, Y) = V_Direction
    
  317.                     TRV = G_NetN(X + 1, Y)
    
  318.                     Continue For
    
  319.                 Else: G_NetN(X, Y) = G_NetD(X, Y): Continue For
    
  320.                 End If
    
  321.             Next
    
  322.         Next
    
  323.         
    
  324. End Select
    
  325. Return TRV
    
  326. End Function
    
  327. 
    
  328. 
    
  329. 
    
  330. '##########################################################################################################################################
    
  331. Sub DoAnimation()
    
  332. Dim TW As Integer = G_ScreenW / 4
    
  333. Dim TH As Integer = G_ScreenH / 4
    
  334. If TH > TW Then TW = TH
    
  335. Do
    
  336.     If G_AnimS < 30 Then G_AnimS += 2
    
  337.     G_AnimZ += G_AnimS
    
  338.     If G_AnimZ > TW Then G_AnimZ = TW
    
  339.     Redraw()
    
  340.     Sleep 15, 1
    
  341.     If G_AnimZ >= TW Then Exit Do
    
  342. Loop
    
  343. End Sub
    
  344. 
    
  345. 
    
  346. 
    
  347. '##########################################################################################################################################
    
  348. Sub DoActions()
    
  349. Dim X As Integer
    
  350. Dim Y As Integer
    
  351. For Y = 1 To 4
    
  352.     For X = 1 To 4
    
  353.         G_NetD(X, Y) = G_NetN(X, Y)
    
  354.         G_NetM(X, Y) = 0
    
  355.     Next
    
  356. Next
    
  357. End Sub
    
  358. 
    
  359. 
    
  360. 
    
  361. '##########################################################################################################################################
    
  362. Sub DoMove(V_Direction As Integer)
    
  363. Dim TRV As Integer
    
  364. Select Case G_GameMode
    
  365.     Case 0
    
  366.         CheckClear()
    
  367.         G_Score += CheckDo1(V_Direction, G_GameMode)
    
  368.         DoAnimation()
    
  369.         DoActions()
    
  370.         G_AnimZ = 0
    
  371.         G_AnimS = 0
    
  372.         
    
  373.     Case 1
    
  374.         Do
    
  375.             G_AnimZ = 0
    
  376.             CheckClear()
    
  377.             TRV = CheckDo1(V_Direction, G_GameMode)
    
  378.             DoAnimation()
    
  379.             DoActions()
    
  380.             Redraw()
    
  381.             If TRV = 0 Then Exit Do
    
  382.             G_Score += TRV
    
  383.         Loop
    
  384.         G_AnimZ = 0
    
  385.         G_AnimS = 0
    
  386.         
    
  387.     Case 2
    
  388.         CheckClear()
    
  389.         G_Score += CheckDo1(V_Direction, G_GameMode)
    
  390.         DoAnimation()
    
  391.         DoActions()
    
  392.         G_AnimZ = 0
    
  393.         G_AnimS = 0
    
  394.         
    
  395. End Select
    
  396. TRV = Net_RndAdd(1)
    
  397. If TRV = 0 Then G_GameEnd = 2
    
  398. G_Score += (TRV * 10)
    
  399. End Sub
    
  400. 
    
  401. 
    
  402. 
    
  403. '##########################################################################################################################################
    
  404. Sub GameStart()
    
  405. G_Score = 0
    
  406. CheckClear()
    
  407. For Y As Integer = 1 To 4
    
  408.     For X As Integer = 1 To 4
    
  409.         G_NetD(X, Y) = 0
    
  410.     Next
    
  411. Next
    
  412. For X As Integer = 1 To 3
    
  413.     Net_RndAdd(1)
    
  414. Next
    
  415. Windowtitle "TPM's netica V1.00 [score: nonix]"
    
  416. G_GameEnd = 0
    
  417. End Sub
    
  418. 
    
  419. 
    
  420. 
    
  421. '##########################################################################################################################################
    
  422. Sub Main()
    
  423. Randomize Timer()
    
  424. Screenres(G_ScreenW, G_ScreenH, 32)
    
  425. Dim TKey As String
    
  426. Dim TKey0 As Ubyte
    
  427. Dim TKey1 As Ubyte
    
  428. Do
    
  429.     TKey0 = 0
    
  430.     TKey1 = 0
    
  431.     TKey = Inkey()
    
  432.     If Len(TKey) > 0 Then TKey0 = TKey[0]
    
  433.     If Len(TKey) > 1 Then TKey1 = TKey[1]
    
  434.     Select Case TKey0
    
  435.         Case 0
    
  436.         Case 13: If G_GameEnd <> 0 Then GameStart()
    
  437.         Case 27: Exit Do
    
  438.         Case 109
    
  439.             G_GameMode += 1
    
  440.             If G_GameMode > 2 Then G_GameMode = 0
    
  441.             G_GameEnd = 1
    
  442.         Case 255
    
  443.             If G_GameEnd <> 0 Then Exit Select
    
  444.             Select Case TKey1
    
  445.                 Case 72: DoMove(1)
    
  446.                 Case 80: DoMove(2)
    
  447.                 Case 75: DoMove(3)
    
  448.                 Case 77: DoMove(4)
    
  449.             End Select
    
  450.             Windowtitle "TPM's netica V1.00 [score: " & Str(G_Score) & "]"
    
  451.             
    
  452.     End Select
    
  453.     Do Until Inkey() = ""
    
  454.     Loop
    
  455.     Redraw()
    
  456.     Sleep 1, 1
    
  457. Loop
    
  458. End Sub
    
  459. 
    
  460. 
    
  461. 
    
  462. '##########################################################################################################################################
    
  463. Main()
    
  464. End 0
    
  465. 
    
  466.