X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fg_tetris.qc;h=70a316386e83d89458bca578c84284acb725eb5c;hb=ae2c1407ec9a05e4f501a6604a7cce8e1030df9f;hp=6fb88e43643e92015d56f6b20b8445b33737d47c;hpb=845401fd312c66c059aaee1772ac5d79555ab4fc;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/g_tetris.qc b/qcsrc/server/g_tetris.qc index 6fb88e436..70a316386 100644 --- a/qcsrc/server/g_tetris.qc +++ b/qcsrc/server/g_tetris.qc @@ -1,3 +1,10 @@ +#if defined(CSQC) +#elif defined(MENUQC) +#elif defined(SVQC) + #include "../dpdefs/dpextensions.qh" + #include "autocvars.qh" +#endif + /* Installation: @@ -24,7 +31,7 @@ float tet_vs_current_timeout; // 2 = game over // 3 = waiting for VS players -var float tet_high_score = 0; +float tet_high_score = 0; const vector TET_START_PIECE_POS = '5 1 0'; const float TET_LINES = 22; @@ -93,11 +100,11 @@ float GetXBlock(float x, string dat) return stof(substring(dat, x-1, 1)); } -string SetXBlock(float x, string dat, float new) +string SetXBlock(float x, string dat, float val) { return strcat( substring(dat, 0, x-1), - ftos(new), + ftos(val), substring(dat, x, -1) ); } @@ -250,31 +257,31 @@ void PieceMinsMaxs(float rot, float pc) // 2 = 2..3 // 3 = 1..3 // 4 = 1..4 - tet_piecemins_x = floor(3.0 - sz.x * 0.5); - tet_piecemaxs_x = floor(2.0 + sz.x * 0.5); - if(sz_y == 1) + tet_piecemins.x = floor(3.0 - sz.x * 0.5); + tet_piecemaxs.x = floor(2.0 + sz.x * 0.5); + if(sz.y == 1) { // special case for "I" - tet_piecemins_y = tet_piecemaxs_y = 2; + tet_piecemins.y = tet_piecemaxs.y = 2; } else { - tet_piecemins_y = 1; - tet_piecemaxs_y = sz.y; + tet_piecemins.y = 1; + tet_piecemaxs.y = sz.y; } //printf("ce%v sz%v mi%v ma%v\n", ce, sz, tet_piecemins, tet_piecemaxs); if (rot == 1) // 90 degrees { t = tet_piecemins.y; - tet_piecemins_y = -tet_piecemins.x + ce.y + ce.x; - tet_piecemins_x = t - ce.y + ce.x; + tet_piecemins.y = -tet_piecemins.x + ce.y + ce.x; + tet_piecemins.x = t - ce.y + ce.x; t = tet_piecemaxs.y; - tet_piecemaxs_y = -tet_piecemaxs.x + ce.y + ce.x; - tet_piecemaxs_x = t - ce.y + ce.x; + tet_piecemaxs.y = -tet_piecemaxs.x + ce.y + ce.x; + tet_piecemaxs.x = t - ce.y + ce.x; // swap mins_y, maxs_y t = tet_piecemins.y; - tet_piecemins_y = tet_piecemaxs.y; - tet_piecemaxs_y = t; + tet_piecemins.y = tet_piecemaxs.y; + tet_piecemaxs.y = t; // TODO OPTIMIZE } else if (rot == 2)//180 @@ -286,15 +293,15 @@ void PieceMinsMaxs(float rot, float pc) else if (rot == 3) // 270 { t = tet_piecemins.y; - tet_piecemins_y = tet_piecemins.x - ce.x + ce.y; - tet_piecemins_x = -t + ce.x + ce.y; + tet_piecemins.y = tet_piecemins.x - ce.x + ce.y; + tet_piecemins.x = -t + ce.x + ce.y; t = tet_piecemaxs.y; - tet_piecemaxs_y = tet_piecemaxs.x - ce.x + ce.y; - tet_piecemaxs_x = -t + ce.x + ce.y; + tet_piecemaxs.y = tet_piecemaxs.x - ce.x + ce.y; + tet_piecemaxs.x = -t + ce.x + ce.y; // swap mins_x, maxs_x t = tet_piecemins.x; - tet_piecemins_x = tet_piecemaxs.x; - tet_piecemaxs_x = t; + tet_piecemins.x = tet_piecemaxs.x; + tet_piecemaxs.x = t; // TODO OPTIMIZE } #ifdef VERIFY @@ -312,10 +319,10 @@ void PieceMinsMaxs(float rot, float pc) for(j = 1; j <= 4; ++j) if(PieceMetric(i, j, rot, pc)) { - realmins_x = min(realmins.x, i); - realmins_y = min(realmins.y, j); - realmaxs_x = max(realmaxs.x, i); - realmaxs_y = max(realmaxs.y, j); + realmins.x = min(realmins.x, i); + realmins.y = min(realmins.y, j); + realmaxs.x = max(realmaxs.x, i); + realmaxs.y = max(realmaxs.y, j); } if(realmins != tet_piecemins || realmaxs != tet_piecemaxs) error(sprintf("incorrect mins/maxs: %v %v in %d rot %d mins %v maxs %v\n", realmins, realmaxs, rot, pc, tet_piecemins, tet_piecemaxs)); @@ -688,7 +695,7 @@ float BastetPiece() bastet_profile_evaluate_time = 0; bastet_profile_checkmetrics_time = 0; - var float t1 = gettime(GETTIME_HIRES); + float t1 = gettime(GETTIME_HIRES); b = buf_create(); bastet_piece[0] = 1; bastet_score[0] = BastetSearch(b, 1, TET_START_PIECE_POS_x, 1+TET_START_PIECE_POS_y, TET_START_PIECE_POS_y, TET_WIDTH) + 100 * random() + bastet_piecetime[0]; buf_del(b); b = buf_create(); bastet_piece[1] = 2; bastet_score[1] = BastetSearch(b, 2, TET_START_PIECE_POS_x, 1+TET_START_PIECE_POS_y, TET_START_PIECE_POS_y, TET_WIDTH) + 100 * random() + bastet_piecetime[1]; buf_del(b); @@ -698,7 +705,7 @@ float BastetPiece() b = buf_create(); bastet_piece[5] = 6; bastet_score[5] = BastetSearch(b, 6, TET_START_PIECE_POS_x, 1+TET_START_PIECE_POS_y, TET_START_PIECE_POS_y, TET_WIDTH) + 100 * random() + bastet_piecetime[5]; buf_del(b); b = buf_create(); bastet_piece[6] = 7; bastet_score[6] = BastetSearch(b, 7, TET_START_PIECE_POS_x, 1+TET_START_PIECE_POS_y, TET_START_PIECE_POS_y, TET_WIDTH) + 100 * random() + bastet_piecetime[6]; buf_del(b); - var float t2 = gettime(GETTIME_HIRES); + float t2 = gettime(GETTIME_HIRES); dprintf("Time taken: %.6f seconds (of this, ev = %.2f%%, cm = %.2f%%)\n", t2 - t1, 100 * bastet_profile_evaluate_time / (t2 - t1), 100 * bastet_profile_checkmetrics_time / (t2 - t1)); // sort @@ -894,7 +901,7 @@ void CompletedLines() cleared = 0; y = TET_LINES; - for(0;;) + for (;;) { ln = GetLine(y); if(strstrofs(ln, "0", 0) < 0) @@ -1001,33 +1008,33 @@ void HandleGame(float keyss) nudge = 0; if (keyss & TETKEY_RIGHT) { - check_pos_x = check_pos.x + 1; + check_pos.x = check_pos.x + 1; tetsnd("tetmove"); } else if (keyss & TETKEY_LEFT) { - check_pos_x = check_pos.x - 1; + check_pos.x = check_pos.x - 1; tetsnd("tetmove"); } else if (keyss & TETKEY_ROTRIGHT) { - check_pos_z = check_pos.z + 1; + check_pos.z = check_pos.z + 1; piece_data = PieceShape(self.piece_type); nudge = 1; tetsnd("tetrot"); } else if (keyss & TETKEY_ROTLEFT) { - check_pos_z = check_pos.z - 1; + check_pos.z = check_pos.z - 1; piece_data = PieceShape(self.piece_type); nudge = 1; tetsnd("tetrot"); } // bounds check if (check_pos.z > 3) - check_pos_z = 0; + check_pos.z = 0; else if (check_pos.z < 0) - check_pos_z = 3; + check_pos.z = 3; // reality check if (CheckMetrics(self.piece_type, check_pos.x, check_pos.y, check_pos.z)) @@ -1063,12 +1070,12 @@ void HandleGame(float keyss) } else if (keyss & TETKEY_DOWN) { - check_pos_y = check_pos.y + 1; + check_pos.y = check_pos.y + 1; self.tet_autodown = time + 2 / (1 + Tetris_Level()); } else if (self.tet_autodown < time) { - check_pos_y = check_pos.y + 1; + check_pos.y = check_pos.y + 1; self.tet_autodown = time + 2 / (1 + Tetris_Level()); } if (CheckMetrics(self.piece_type, check_pos.x, check_pos.y, check_pos.z))