[nexuiz-commits] r7395 - trunk/data/qcsrc/server
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Sat Aug 8 16:03:46 EDT 2009
Author: div0
Date: 2009-08-08 16:03:42 -0400 (Sat, 08 Aug 2009)
New Revision: 7395
Modified:
trunk/data/qcsrc/server/cl_client.qc
trunk/data/qcsrc/server/cl_impulse.qc
trunk/data/qcsrc/server/g_tetris.qc
trunk/data/qcsrc/server/progs.src
Log:
tetris: fix rotation; set impulse from 200 to 100; change keys (now UP rotates, SPACE drops to bottom)
enable tetris by fteqcc -DTETRIS
Modified: trunk/data/qcsrc/server/cl_client.qc
===================================================================
--- trunk/data/qcsrc/server/cl_client.qc 2009-08-08 17:29:26 UTC (rev 7394)
+++ trunk/data/qcsrc/server/cl_client.qc 2009-08-08 20:03:42 UTC (rev 7395)
@@ -2519,8 +2519,6 @@
self.dmg_team = max(0, self.dmg_team - cvar("g_teamdamage_resetspeed") * frametime);
//self.angles_y=self.v_angle_y + 90; // temp
-
- //if (TetrisPreFrame()) return;
} else if(gameover) {
if (intermission_running)
IntermissionThink (); // otherwise a button could be missed between
@@ -2573,6 +2571,11 @@
}
target_voicescript_next(self);
+
+#ifdef TETRIS
+ if (TetrisPreFrame())
+ return;
+#endif
}
// on dragger:
@@ -2847,8 +2850,6 @@
if (intermission_running)
return; // intermission or finale
- //if (TetrisPostFrame()) return;
-
GetPressedKeys();
} else if (self.classname == "observer") {
//do nothing
@@ -2878,4 +2879,9 @@
if(self.waypointsprite_attachedforcarrier)
WaypointSprite_UpdateHealth(self.waypointsprite_attachedforcarrier, '1 0 0' * healtharmor_maxdamage(self.health, self.armorvalue, cvar("g_balance_armor_blockpercent")));
+
+#ifdef TETRIS
+ if (TetrisPostFrame())
+ return;
+#endif
}
Modified: trunk/data/qcsrc/server/cl_impulse.qc
===================================================================
--- trunk/data/qcsrc/server/cl_impulse.qc 2009-08-08 17:29:26 UTC (rev 7394)
+++ trunk/data/qcsrc/server/cl_impulse.qc 2009-08-08 20:03:42 UTC (rev 7395)
@@ -490,5 +490,7 @@
}
}
- //TetrisImpulses(imp);
+#ifdef TETRIS
+ TetrisImpulses(imp);
+#endif
}
Modified: trunk/data/qcsrc/server/g_tetris.qc
===================================================================
--- trunk/data/qcsrc/server/g_tetris.qc 2009-08-08 17:29:26 UTC (rev 7394)
+++ trunk/data/qcsrc/server/g_tetris.qc 2009-08-08 20:03:42 UTC (rev 7395)
@@ -2,17 +2,16 @@
Installation:
-in cl_impulse.qc add TetrisImpulses(); to ImpulseCommands
+compile with -DTETRIS
-in progs.src add g_tetris.qc after g_subs.qc
-in cl_client.qc add if (TetrisPreFrame()) return; to PlayerPreThink
-in cl_client.qc add if (TetrisPostFrame()) return; to PlayerPostThink
-
*/
+#ifdef TETRIS
+
.vector tet_org;
-.float tetris_on, tet_time, tet_autodown;
+.float tet_old_keys;
+.float tetris_on, tet_gameovertime, tet_drawtime, tet_autodown;
.vector piece_pos;
.float piece_type, next_piece, tet_score, tet_lines;
@@ -33,6 +32,7 @@
float TETKEY_RIGHT = 8;
float TETKEY_ROTLEFT = 16;
float TETKEY_ROTRIGHT = 32;
+float TETKEY_DROP = 64;
float PIECES = 7;
@@ -43,7 +43,16 @@
float SVC_CENTERPRINTa = 26;
+float Tetris_Level()
+{
+ return ((floor((self.tet_lines / 20)) + 1));
+};
+void tetsnd(string snd)
+{
+ play2(self, strcat("sounds/tetris/", snd));
+}
+
/*
*********************************
@@ -219,14 +228,14 @@
##
*/
if (pc == 1)
- return '20 20 0'; // 1 * 4 + 1 * 16
+ return '5 5 2'; // 1 * 4 + 1 * 16
/*
2 =
####
*/
else if (pc == 2)
- return '85 0 0';
+ return '85 0 4';
/*
3 =
@@ -235,7 +244,7 @@
#
*/
else if (pc == 3)
- return '21 1 0';
+ return '21 1 3';
/*
4 =
@@ -243,14 +252,14 @@
###
*/
else if (pc == 4)
- return '1 21 0';
+ return '1 21 3';
/*
5 =
##
##
*/
else if (pc == 5)
- return '5 20 0';
+ return '5 20 3';
/*
6 =
@@ -258,7 +267,7 @@
##
*/
else if (pc == 6)
- return '20 5 0';
+ return '20 5 3';
/*
7 =
@@ -266,7 +275,7 @@
###
*/
else if (pc == 7)
- return '4 21 0';
+ return '4 21 3';
else
@@ -279,28 +288,30 @@
{
float t;
vector piece_dat;
+ float wid;
// return bits of a piece
+ piece_dat = PieceShape(pc);
+ wid = piece_dat_z + 1;
if (rot == 1) // 90 degrees
{
t = y;
y = x;
- x = 5 - t;
+ x = wid - t;
}
else if (rot == 2)//180
{
- x = 5 - x;
+ x = wid - x;
y = 3 - y;
}
else if (rot == 3) // 270
{
t = y;
- y = 5 - x;
+ y = wid - x;
x = t;
}
if (x < 1 || y < 1 || x > 4 || y > 2)
return 0;
- piece_dat = PieceShape(pc);
if (y == 1)
return GetXBlock(x, piece_dat_x); // first row
else if (y == 2)
@@ -411,6 +422,14 @@
WriteChar(MSG_ONE, 10);
for (i = 1; i <= TET_LINES; i = i + 1)
{
+ if(self.tetris_on == 2 && i == 11)
+ {
+ p6(' ', ' ', ' ', ' ', ' ', ' ');
+ p6(' ', 'G', 'A', 'M', 'E', ' ');
+ p6(' ', 'O', 'V', 'E', 'R', ' ');
+ WriteChar(MSG_ONE, 10);
+ continue;
+ }
DrawLine(i);
if (i == 1)
p6(' ', 'N', 'E', 'X', 'T', ' ');
@@ -435,7 +454,7 @@
else if (i == 16)
p6(' ', 'L', 'E', 'V', 'E', 'L');
else if (i == 17)
- pnum(floor(self.tet_lines / 20)+ 1, 0);
+ pnum(Tetris_Level(), 0);
else
p6(' ', ' ', ' ', ' ', ' ', ' ');
WriteChar(MSG_ONE, 10);
@@ -469,12 +488,13 @@
};
-void Tet_GameOver()
+void Tet_GameExit()
{
- centerprint(self, "Game Over");
+ centerprint(self, "");
self.tetris_on = 0;
ResetTetris();
self.movetype = MOVETYPE_WALK;
+ stuffcmd(self, "loadfont user1 gfx/vera-sans\n");
};
@@ -493,7 +513,7 @@
void TetAddScore(float n)
{
- self.tet_score = self.tet_score + n;
+ self.tet_score = self.tet_score + n * Tetris_Level();
if (self.tet_score > tet_high_score)
tet_high_score = self.tet_score;
};
@@ -584,6 +604,12 @@
ln = GetLine(y - cleared);
SetLine(y, ln);
}
+ if(cleared == 4)
+ tetsnd("tetris");
+ else if(cleared)
+ tetsnd("tetline");
+ else
+ tetsnd("tetland");
self.tet_lines = self.tet_lines + cleared;
TetAddScore(cleared * cleared * 10);
};
@@ -592,12 +618,12 @@
{
// first off, we need to see if we need a new piece
+ vector piece_data;
vector check_pos;
+ vector old_pos;
float brand_new;
+ float i;
brand_new = 0;
- if (self.tet_time > time)
- return;
- self.tet_time = time + 0.1;
if (self.piece_type == 0)
@@ -618,16 +644,34 @@
// next we need to check the piece metrics against what's on the level
// based on the key order
- check_pos = self.piece_pos;
+ old_pos = check_pos = self.piece_pos;
+ float nudge;
+ nudge = 0;
if (keyss & TETKEY_RIGHT)
+ {
check_pos_x = check_pos_x + 1;
+ tetsnd("tetmove");
+ }
else if (keyss & TETKEY_LEFT)
+ {
check_pos_x = check_pos_x - 1;
+ tetsnd("tetmove");
+ }
else if (keyss & TETKEY_ROTRIGHT)
+ {
check_pos_z = check_pos_z + 1;
+ piece_data = PieceShape(self.piece_type);
+ nudge = piece_data_z - 2;
+ tetsnd("tetrot");
+ }
else if (keyss & TETKEY_ROTLEFT)
+ {
check_pos_z = check_pos_z - 1;
+ piece_data = PieceShape(self.piece_type);
+ nudge = piece_data_z - 2;
+ tetsnd("tetrot");
+ }
// bounds check
if (check_pos_z > 3)
check_pos_z = 0;
@@ -638,23 +682,60 @@
if (CheckMetrics(self.piece_type, check_pos_x, check_pos_y, check_pos_z))
self.piece_pos = check_pos;
else if (brand_new)
- Tet_GameOver();
+ {
+ self.tetris_on = 2;
+ self.tet_gameovertime = time + 2;
+ return;
+ }
+ else
+ {
+ for(i = 1; i <= nudge; ++i)
+ {
+ if(CheckMetrics(self.piece_type, check_pos_x + i, check_pos_y, check_pos_z))
+ {
+ self.piece_pos = check_pos + '1 0 0' * i;
+ break;
+ }
+ else if(CheckMetrics(self.piece_type, check_pos_x - i, check_pos_y, check_pos_z))
+ {
+ self.piece_pos = check_pos - '1 0 0' * i;
+ break;
+ }
+ }
+ }
check_pos = self.piece_pos;
- if (keyss & TETKEY_DOWN)
+ if(keyss & TETKEY_DROP)
+ {
+ // drop to bottom, but do NOT cement it yet
+ // this allows sliding it
+ ++check_pos_y;
+ while(CheckMetrics(self.piece_type, check_pos_x, check_pos_y + 1, check_pos_z))
+ ++check_pos_y;
+ self.tet_autodown = time + 1 / Tetris_Level();
+ }
+ else if (keyss & TETKEY_DOWN)
+ {
check_pos_y = check_pos_y + 1;
+ self.tet_autodown = time + 1 / Tetris_Level();
+ }
else if (self.tet_autodown < time)
{
check_pos_y = check_pos_y + 1;
- self.tet_autodown = time + 1 / (floor(self.tet_lines / 20) + 1);
+ self.tet_autodown = time + 1 / Tetris_Level();
}
if (CheckMetrics(self.piece_type, check_pos_x, check_pos_y, check_pos_z))
+ {
+ if(old_pos != check_pos)
+ self.tet_drawtime = 0;
self.piece_pos = check_pos;
+ }
else
{
CementPiece(self.piece_type, self.piece_pos_x, self.piece_pos_y, self.piece_pos_z);
TetAddScore(1);
CompletedLines();
self.piece_type = 0;
+ self.tet_drawtime = 0;
return;
}
CementPiece(self.piece_type, self.piece_pos_x, self.piece_pos_y, self.piece_pos_z);
@@ -671,14 +752,21 @@
void TetrisImpulses(float imp)
{
- if (imp == 200)
+ if (imp != 100)
+ return;
+ if(self.tetris_on != 1)
{
self.tetris_on = 1;
ResetTetris();
self.tet_org = self.origin;
self.movetype = MOVETYPE_NOCLIP;
- stuffcmd(self, "cl_bob 0\ncl_rollangle 0\n");
+ stuffcmd(self, "loadfont user1 gfx/conchars\n");
}
+ else
+ {
+ Tet_GameExit();
+ self.impulse = 0;
+ }
};
@@ -688,11 +776,11 @@
return 0;
self.tet_org = self.origin;
- if (self.tet_time > time)
+ if (self.tet_drawtime > time)
return 1;
Draw_Tetris();
+ self.tet_drawtime = time + 0.5;
return 1;
-
};
float frik_anglemoda(float v)
{
@@ -715,31 +803,40 @@
float TetrisPostFrame()
{
- vector mov;
- float keysa, norm;
+ float keysa, keysb;
keysa = 0;
if (!self.tetris_on)
return 0;
-
- if (self.origin != self.tet_org)
+ if(self.tetris_on == 2 && time > self.tet_gameovertime)
{
- self.origin = self.tet_org;
- if(self.movement_x < 0)
- keysa |= TETKEY_DOWN;
- else if(self.movement_x > 0)
- keysa |= TETKEY_UP;
- if(self.movement_y < 0)
- keysa |= TETKEY_LEFT;
- else if(self.movement_y > 0)
- keysa |= TETKEY_RIGHT;
+ Tet_GameExit();
+ return 0;
}
- if (self.BUTTON_ATCK)
- keysa = keysa | TETKEY_ROTRIGHT;
+
+ self.origin = self.tet_org;
+
+ if(self.movement_x < 0)
+ keysa |= TETKEY_DOWN;
+ else if(self.movement_x > 0)
+ keysa |= TETKEY_ROTRIGHT;
+ if(self.movement_y < 0)
+ keysa |= TETKEY_LEFT;
+ else if(self.movement_y > 0)
+ keysa |= TETKEY_RIGHT;
+ if (self.BUTTON_CROUCH)
+ keysa = keysa | TETKEY_ROTLEFT;
if (self.BUTTON_JUMP)
- keysa = keysa | TETKEY_ROTLEFT;
- HandleGame(keysa);
+ keysa = keysa | TETKEY_DROP;
+
+ keysb = keysa;
+ keysa &~= self.tet_old_keys;
+ self.tet_old_keys = keysb;
+
+ if(self.tetris_on == 1)
+ HandleGame(keysa);
return 1;
};
+#endif
Modified: trunk/data/qcsrc/server/progs.src
===================================================================
--- trunk/data/qcsrc/server/progs.src 2009-08-08 17:29:26 UTC (rev 7394)
+++ trunk/data/qcsrc/server/progs.src 2009-08-08 20:03:42 UTC (rev 7395)
@@ -109,7 +109,7 @@
t_items.qc
cl_weapons.qc
-//g_tetris.qc
+g_tetris.qc
cl_impulse.qc
ent_cs.qc
More information about the nexuiz-commits
mailing list