[nexuiz-commits] r7415 - trunk/data/qcsrc/server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Sun Aug 9 14:47:58 EDT 2009


Author: div0
Date: 2009-08-09 14:47:58 -0400 (Sun, 09 Aug 2009)
New Revision: 7415

Modified:
   trunk/data/qcsrc/server/g_tetris.qc
Log:
bucket-of-seven randomization


Modified: trunk/data/qcsrc/server/g_tetris.qc
===================================================================
--- trunk/data/qcsrc/server/g_tetris.qc	2009-08-09 18:38:31 UTC (rev 7414)
+++ trunk/data/qcsrc/server/g_tetris.qc	2009-08-09 18:47:58 UTC (rev 7415)
@@ -17,6 +17,7 @@
 .float tetris_on, tet_gameovertime, tet_drawtime, tet_autodown;
 .vector piece_pos;
 .float piece_type, next_piece, tet_score, tet_lines;
+.float tet_piece_bucket;
 
 // tetris_on states:
 //   1 = running
@@ -505,7 +506,7 @@
 	self.piece_pos = '0 0 0';
 	self.piece_type = 0;
 	self.next_piece = self.tet_lines = self.tet_score = 0;
-
+	self.tet_piece_bucket = 0;
 };
 
 void Tet_GameExit()
@@ -526,9 +527,40 @@
 
 *********************************
 */
+.float tet_piece_bucket;
 float RandomPiece()
 {
-	return floor(random() * PIECES) + 1;
+	float i, j;
+	float p, q;
+	float b;
+	float seen;
+	if(self.tet_piece_bucket > 1)
+	{
+		p = mod(self.tet_piece_bucket, 7);
+		self.tet_piece_bucket = floor(self.tet_piece_bucket / 7);
+		return p + 1;
+	}
+	else
+	{
+		p = floor(random() * 7);
+		seen = pow(2, p);
+		b = 1;
+		for(i = 6; i > 0; --i)
+		{
+			q = floor(random() * i);
+			for(j = 0; j <= q; ++j)
+				if(seen & pow(2, j))
+					++q;
+			if(seen & pow(2, q))
+				error("foo 1");
+			if(q >= 7)
+				error("foo 2");
+			seen |= pow(2, q);
+			b += q;
+			b *= 7;
+		}
+		return p + 1;
+	}
 };
 
 void TetAddScore(float n)



More information about the nexuiz-commits mailing list