diff options
author | Travis Howell | 2006-10-03 10:01:08 +0000 |
---|---|---|
committer | Travis Howell | 2006-10-03 10:01:08 +0000 |
commit | af5c8eb1c3bb76df86a3506f006135577c0ac476 (patch) | |
tree | 684740e736219a9639a8b8441d7b9f29ffd93a8e /engines/agos/rules.cpp | |
parent | 9e097f60abec89ca38663da488be0ba1a6559573 (diff) | |
download | scummvm-rg350-af5c8eb1c3bb76df86a3506f006135577c0ac476.tar.gz scummvm-rg350-af5c8eb1c3bb76df86a3506f006135577c0ac476.tar.bz2 scummvm-rg350-af5c8eb1c3bb76df86a3506f006135577c0ac476.zip |
Remove blocks/tiles related code for PP, which was only required by unreleased game
svn-id: r24092
Diffstat (limited to 'engines/agos/rules.cpp')
-rw-r--r-- | engines/agos/rules.cpp | 841 |
1 files changed, 0 insertions, 841 deletions
diff --git a/engines/agos/rules.cpp b/engines/agos/rules.cpp deleted file mode 100644 index b57d6fb4a0..0000000000 --- a/engines/agos/rules.cpp +++ /dev/null @@ -1,841 +0,0 @@ -/* ScummVM - Scumm Interpreter - * Copyright (C) 2001 Ludvig Strigeus - * Copyright (C) 2001-2006 The ScummVM project - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - * $URL$ - * $Id: vga.cpp 24023 2006-09-30 02:15:02Z kirben $ - * - */ - -#include "common/stdafx.h" - -#include "common/system.h" - -#include "agos/agos.h" - -namespace AGOS { - -static const byte tileDefs[] = { - 2,0,0,0, - 3,0,0,0, - 2,0,4,0, - 3,0,5,0, - 4,0,6,0, - 5,0,7,0, - 6,0,8,0, - 7,0,9,0, - 8,0,10,0, - 9,0,11,0, - 10,0,0,0, - 11,0,0,0, - 14,85,0,0, - 15,86,0,0, - 14,85,16,87, - 15,86,17,88, - 16,87,18,89, - 17,88,19,90, - 18,89,0,0, - 19,90,0,0, - 22,0,0,0, - 23,91,0,0, - 22,0,24,92, - 23,91,25,93, - 24,92,26,94, - 25,93,27,95, - 26,94,28,96, - 27,95,29,0, - 28,96,0,0, - 29,0,0,0, - 32,0,0,0, - 31,0,33,0, - 32,0,34,97, - 33,0,35,98, - 34,97,36,99, - 35,98,37,100, - 36,99,38,101, - 37,100,39,102, - 38,101,40,0, - 39,102,41,0, - 40,0,42,0, - 41,0,0,0, - 44,0,0,0, - 43,0,45,0, - 44,0,46,103, - 45,0,47,104, - 46,103,48,105, - 47,104,49,106, - 48,105,50,107, - 49,106,51,108, - 50,107,52,0, - 51,108,53,0, - 52,0,54,0, - 53,0,0,0, - 56,0,0,0, - 57,109,0,0, - 56,0,58,110, - 57,109,59,111, - 58,110,60,112, - 59,111,61,113, - 60,112,62,114, - 61,113,63,0, - 62,114,0,0, - 63,0,0,0, - 66,115,0,0, - 67,116,0,0, - 66,115,68,117, - 67,116,69,118, - 68,117,70,119, - 69,118,71,120, - 70,119,0,0, - 71,120,0,0, - 74,0,0,0, - 75,0,0,0, - 74,0,76,0, - 75,0,77,0, - 76,0,78,0, - 77,0,79,0, - 78,0,80,0, - 79,0,81,0, - 80,0,82,0, - 81,0,83,0, - 82,0,0,0, - 83,0,0,0, - 86,0,0,0, - 87,0,0,0, - 86,0,88,0, - 87,0,89,0, - 88,0,0,0, - 89,0,0,0, - 92,121,0,0, - 93,122,0,0, - 92,121,94,123, - 93,122,95,124, - 94,123,0,0, - 95,124,0,0, - 98,125,0,0, - 99,126,0,0, - 98,125,100,127, - 99,126,101,128, - 100,127,0,0, - 101,128,0,0, - 104,129,0,0, - 105,130,0,0, - 104,129,106,131, - 105,130,107,132, - 106,131,0,0, - 107,132,0,0, - 110,133,0,0, - 111,134,0,0, - 110,133,112,135, - 111,134,113,136, - 112,135,0,0, - 113,136,0,0, - 116,0,0,0, - 117,0,0,0, - 116,0,118,0, - 117,0,119,0, - 118,0,0,0, - 119,0,0,0, - 122,0,0,0, - 123,0,0,0, - 122,0,0,0, - 123,0,0,0, - 126,137,0,0, - 127,138,0,0, - 126,137,0,0, - 127,138,0,0, - 130,139,0,0, - 131,140,0,0, - 130,139,0,0, - 131,140,0,0, - 134,0,0,0, - 135,0,0,0, - 134,0,0,0, - 135,0,0,0, - 0,0,0,0, - 0,0,0,0, - 0,0,0,0, - 0,0,0,0, - 0,0,0,0, - 31,0,43,0, - 42,0,54,0, - 143,0,0,0, -}; - -static const byte tileDefs1[] = { - 14,13,14,15,0,0,0,0, - 15,14,15,16,0,0,0,0, - 16,15,16,17,0,0,0,0, - 17,16,17,18,0,0,0,0, - 18,17,18,19,0,0,0,0, - 19,18,19,20,0,0,0,0, - 23,22,23,24,0,0,0,0, - 24,23,24,25,0,0,0,0, - 25,24,25,26,0,0,0,0, - 26,25,26,27,0,0,0,0, - 27,26,27,28,0,0,0,0, - 28,27,28,29,0,0,0,0, - 34,33,34,35,0,0,0,0, - 35,34,35,36,0,0,0,0, - 36,35,36,37,0,0,0,0, - 37,36,37,38,0,0,0,0, - 38,37,38,39,0,0,0,0, - 39,38,39,40,0,0,0,0, - 46,45,46,47,0,0,0,0, - 47,46,47,48,0,0,0,0, - 48,47,48,49,0,0,0,0, - 49,48,49,50,0,0,0,0, - 50,49,50,51,0,0,0,0, - 51,50,51,52,0,0,0,0, - 57,56,57,58,0,0,0,0, - 58,57,58,59,0,0,0,0, - 59,58,59,60,0,0,0,0, - 60,59,60,61,0,0,0,0, - 61,60,61,62,0,0,0,0, - 62,61,62,63,0,0,0,0, - 66,65,66,67,0,0,0,0, - 67,66,67,68,0,0,0,0, - 68,67,68,69,0,0,0,0, - 69,68,69,70,0,0,0,0, - 70,69,70,71,0,0,0,0, - 71,70,71,72,0,0,0,0, - 92,91,92,93,0,0,0,0, - 93,92,93,94,0,0,0,0, - 94,93,94,95,0,0,0,0, - 95,94,95,96,0,0,0,0, - 98,97,98,99,0,0,0,0, - 99,98,99,100,0,0,0,0, - 100,99,100,101,0,0,0,0, - 101,100,101,102,0,0,0,0, - 104,103,104,105,0,0,0,0, - 105,104,105,106,0,0,0,0, - 106,105,106,107,0,0,0,0, - 107,106,107,108,0,0,0,0, - 110,109,110,111,0,0,0,0, - 111,110,111,112,0,0,0,0, - 112,111,112,113,0,0,0,0, - 113,112,113,114,0,0,0,0, - 126,125,126,127,0,0,0,0, - 127,126,127,128,0,0,0,0, - 130,129,130,131,0,0,0,0, - 131,130,131,132,0,0,0,0, - 137,0,138,0,139,0,140,0, - 0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0, -}; - -bool AGOSEngine::block0Supported(int i, int y) { - if (y == 0) { - // Always supported at bottom level - return true; - } - - int a = _variableArray[i]; - - while(1) { - if (_variableArray[i - 8] != 0) { - // Supported - return true; - } - - i++; - - if (_variableArray[i] != a) { - // Got to end of block and found no support - return false; - } - } -} - -bool AGOSEngine::block1Supported(int i, int y) { - if (y == 0) { - // Always supported at bottom level - return true; - } - - int a = _variableArray[i]; - - while(1) { - if(_variableArray[i - 8] != 0) { - // Supported - return true; - } - - i += 128; - - if (_variableArray[i] != a) { - // Got to end of block and found no support - return false; - } - } -} - -void AGOSEngine::checkTiles() { - printf("checkTiles\n"); - - const byte *tile; - uint i, slot; - - slot = _variableArray[400] - 1; - - tile = &tileDefs[slot * 4 + 1]; - for (i = 0; i < 2; i++) { - if (tile[1] != 0 && findBox(tile[1]) != 0) - continue; - if (tile[0] != 0) - enableBox(tile[0]); - tile += 2; - } - - tile = &tileDefs1[slot * 8 + 1]; - for (i = 0; i < 4; i++) { - if (tile[1] != 0 && findBox(tile[1]) != 0) - continue; - if (tile[0] != 0) - enableBox(tile[0]); - tile += 2; - } -} - -void AGOSEngine::moveBlocks() { - printf("moveBlocks\n"); - - VgaSprite *vsp; - const byte *vcPtrOrg; - uint16 tmp; - uint num, i; - - num = _variableArray[414] + 1; - - for (i = 0; i < num; i++) { - _vgaCurSpriteId = _variableArray[410]; - _vgaCurZoneNum = 60; - - vsp = findCurSprite(); - vsp->x += _variableArray[411]; - vsp->y += _variableArray[412]; - - tmp = to16Wrapper(_variableArray[413]); - - vcPtrOrg = _vcPtr; - _vcPtr = (byte *)&tmp; - vc23_setSpritePriority(); - _vcPtr = vcPtrOrg; - - _variableArray[410] += 1; - _variableArray[413] -= 8; - } - - setBitFlag(99, false); - _marks |= (1 << 1); -} - -void AGOSEngine::dropBlock(int id, int priority, int num) { - VgaSprite *vsp; - const byte *vcPtrOrg; - uint16 tmp; - int i; - - for (i = 0; i < num; i++) { - _vgaCurSpriteId = id; - _vgaCurZoneNum = 60; - - vsp = findCurSprite(); - vsp->y += 20; - - tmp = to16Wrapper(priority); - - vcPtrOrg = _vcPtr; - _vcPtr = (byte *)&tmp; - vc23_setSpritePriority(); - _vcPtr = vcPtrOrg; - - id += 1; - priority -= 8; - } -} - -void AGOSEngine::droppingBlock() { - printf("droppingBlock\n"); - - if (_droppingBlockAnim == 0) - return; - - printf("droppingBlock\n"); - - VgaSprite *vsp; - const byte *vcPtrOrg; - uint i, result, speed; - uint16 tmp; - - speed = (getBitFlag(82) != 0) ? 10 : 5; - for (i = 0; i < _droppingBlockLength; i++) { - _vgaCurSpriteId = _droppingBlockAnim + i; - _vgaCurZoneNum = 60; - vsp = findCurSprite(); - vsp->y += speed; - } - - _vgaCurSpriteId = _droppingBlockAnim; - _vgaCurZoneNum = 60; - vsp = findCurSprite(); - - result = _droppingBlockCount - 1; - if (result == 0 || (speed == 10 && result == 2)) { - result = hasBlockLanded(vsp->y, _droppingBlockAnim, vsp->priority, _droppingBlockType, _droppingBlockX, _droppingBlockY, _droppingBlockZ); - result += 4; - if (result == 0) { - _droppingBlockAnim = 0; - _droppingBlockLand = 0; - setBitFlag(94, 0); - } - } - - _droppingBlockCount = result; - if (result == 3) { - for (i = 0; i < _droppingBlockLength; i++) { - vsp = findCurSprite(); - - tmp = to16Wrapper(vsp->priority - 64); - - vcPtrOrg = _vcPtr; - _vcPtr = (byte *)&tmp; - vc23_setSpritePriority(); - _vcPtr = vcPtrOrg; - - _vgaCurSpriteId += 1; - } - } - - if (_droppingBlockLand == 0) { - droppingBlock(); - } -} - - -void AGOSEngine::stopBlock(int id, int num) { - const byte *vcPtrOrg; - uint16 i, items[2]; - - for (i = 0; i < num; i++) { - items[0] = to16Wrapper(60); - items[1] = to16Wrapper(id); - - vcPtrOrg = _vcPtr; - _vcPtr = (byte *)&items; - vc60_killSprite(); - _vcPtr = vcPtrOrg; - - id++; - } -} - -void AGOSEngine::remove0Block(int i) { - int a = _variableArray[i]; - if(a == 0) - return; - while (_variableArray[i] == a) - _variableArray[i++] = 0; - stopBlock(a, 0); - a = a & 0xff80; // Point to flags 420 - 425 containing counts - a = a / 128; // For each colour block - a += 419; - _variableArray[a]--; -} - -void AGOSEngine::remove1Block(int i) { - int a = _variableArray[i]; - int b = -1; - if (a == 0) - return; - while (_variableArray[i] == a) { - _variableArray[i] = 0; - i += 128; - b++; - } - stopBlock(a, b); - a = a & 0xff80; // Point to flags 420 - 425 containing counts - a -= 1024; - a = a / 128; // for each colour block - a += 419; - _variableArray[a]--; -} - -void AGOSEngine::pairCheck() { - printf("pairCheck\n"); - - int i, j, j1, k; - int x, y, z; - int flag; - int block; - int blockColour; - int pairsList0[50][2]; - int pairsList1[50][2]; - - j = 0; - - // For each level - for (y = 0; y < 16; y++) { - // Check Type 0 blocks - blocks totally covered by others - // further away along Z axis - - for (z = 0; z < 7; z++) { - flag = 1000 + z * 128 + y * 8; - // This assumes minimum block length of 3 - for (x = 0; x < 6; x++) { - block = _variableArray[flag + x]; - blockColour = block & 0xff80; - if (block < 999 && block != 0) { - i = x; - while (1) { - // Not same colour? - if (((_variableArray[flag + x + 128]) & 0xff80) != blockColour) { - // To end of block - x++; - while (_variableArray[flag + x] == block) - x++; - x--; - break; - } - x++; - if (_variableArray[flag + x] != block) { - // Got a pair - i += flag; - k = i + 128; - block = _variableArray[k]; - // Back to start of covering block - k--; - while (_variableArray[k] == block) - k--; - k++; - if (block0Supported(i, y) && block0Supported(k, y)) { - // Form a list and remove blocks when finished check - pairsList0[j][0] = i; - pairsList0[j++][1] = k; - } - x--; - break; - } - } - } - } - } - - // Check Type 0 blocks - blocks totally covered by others - // further towards along Z axis - - for (z = 7; z > 0; z--) { - flag = 1000 + z * 128 + y * 8; - // This assumes minimum block length of 3 - for (x = 0; x < 6; x++) { - block = _variableArray[flag + x]; - blockColour = block & 0xff80; - if (block < 999 && block != 0) { - i = x; - while (1) { - // Not same colour - if (((_variableArray[flag + x - 128]) & 0xff80) != blockColour) { - // To end of block - x++; - while (_variableArray[flag + x] == block) - x++; - x--; - break; - } - x++; - if (_variableArray[flag + x] != block) { - // Got a pair - i += flag; - k = i - 128; - block = _variableArray[k]; - // Back to start of covering block - k--; - while (_variableArray[k]==block) - k--; - k++; - if (block0Supported(i, y) && block0Supported(k, y)) { - // Form a list and remove blocks when finished check - pairsList0[j][0] = i; - pairsList0[j++][1] = k; - } - x--; - break; - } - } - } - } - } - } - - j1 = 0; - - // For each level - for (y = 0; y < 16; y++) { - // Check Type 1 blocks - blocks totally covered by others - // further right along X axis - - for (x = 0; x < 7; x++) { - flag = 1000 + x + y * 8; - // This assumes minimum block length of 3 - for (z = 0; z < (6 * 128); z += 128) { - block = _variableArray[flag + z]; - blockColour = block & 0xff80; - if (block > 999) { - i = z; - while (1) { - // Not the same colour? - if (((_variableArray[flag + z + 1]) & 0xff80) != blockColour) { - z += 128; - // To end of block - while (_variableArray[flag + z] == block) - z += 128; - z -= 128; - break; - } - z += 128; - if (_variableArray[flag + z] != block) { - // Got a pair - i += flag; - k = i + 1; - block = _variableArray[k]; - k -= 128; - // Back to start of covering block - while (_variableArray[k] == block) - k -= 128; - k += 128; - if (block1Supported(i, y) && block1Supported(k, y)) { - // Form a list and remove blocks when finished check - pairsList1[j1][0] = i; - pairsList1[j1++][1] = k; - } - z -= 128; - break; - } - } - } - } - } - - // Check Type 1 blocks - blocks totally covered by others - // further left along X axis - - for (x = 7; x > 0; x--) { - flag = 1000 + x + y * 8; - // This assumes minimum block length of 3 - for (z = 0; z < (6 * 128); z += 128) { - block = _variableArray[flag + z]; - blockColour = block & 0xff80; - if (block > 999) { - i = z; - while (1) { - // Not same colour? - if (((_variableArray[flag + z - 1]) & 0xff80) != blockColour) - { - z += 128; - // To end of block - while (_variableArray[flag + z] == block) - z += 128; - z -= 128; - break; - } - z += 128; - if (_variableArray[flag + z] != block) { - // Got a pair - i += flag; - k = i - 1; - block = _variableArray[k]; - k -= 128; - // Back to start of covering block - while (_variableArray[k] == block) - k -= 128; - k += 128; - if (block1Supported(i, y) && block1Supported(k, y)) { - // Form a list and remove blocks when finished check - pairsList1[j1][0] = i; - pairsList1[j1++][1] = k; - } - z -= 128; - break; - } - } - } - } - } - } - - // Remove any pairs - - if (j != 0) { - for (i = 0; i < j; i++) { - remove0Block(pairsList0[i][0]); - remove0Block(pairsList0[i][1]); - } - } - - if (j1 != 0) { - for (i = 0; i < j1; i++) { - remove1Block(pairsList1[i][0]); - remove1Block(pairsList1[i][1]); - } - } -} - -void AGOSEngine::gravityCheck() { - printf("gravityCheck\n"); - - int i, k; - int x, y, z; - int flag; - int block; - - // For each level - for (y = 1; y < 16; y++) { - // Check Type 0 blocks - for (z = 0; z < 8; z++) { - flag = 1000 + z * 128 + y * 8; - // This assumes minimum block length of 3 - for (x = 0; x < 6; x++) { - block = _variableArray[flag + x]; - if (block < 999 && block != 0) { - i = x; - while (1) { - // Can't drop? - if (_variableArray[flag + x - 8] != 0) { - x++; - // To end of block - while (_variableArray[flag + x] == block) - ; - x--; - break; - } - x++; - // Can drop? - if (_variableArray[flag + x] != block) { - x = i; - while (_variableArray[flag + x] == block) { - _variableArray[flag + x] = 0; - _variableArray[flag + x - 8] = block; - x++; - } - dropBlock(block, (y - 1) * 64 + (8 - z) * 8 + i, 0); - x--; - break; - } - } - } - } - } - - // Check Type 1 blocks - - for (x = 0; x < 8; x++) { - flag = 1000 + y * 8 + x; - for (z = 0; z < (6 * 128); z += 128) { - block = _variableArray[flag + z]; - if (block > 999) { - i = z; - while (1) { - // Can't drop? - if (_variableArray[flag + z - 8] != 0) { - z += 128; - // To end of block - while (_variableArray[flag + z] == block) - z += 128; - z -= 128; - break; - } - z += 128; - // Can drop? - if (_variableArray[flag + z] != block) { - z = i; - k = -1; - while (_variableArray[flag + z] == block) { - _variableArray[flag + z] = 0; - _variableArray[flag + z - 8] = block; - z += 128; - k++; - } - dropBlock(block, (y - 1) * 64 + (8 - i / 128) * 8 + x, k); - z -= 128; - break; - } - } - } - } - } - } -} - -bool AGOSEngine::hasBlockLanded(int16 yofs, int16 block, int16 priority, int16 type, int16 x, int16 y, int16 z) { - if (type == 1) { - x++; - z--; - } - - if (y > 15) - return true; - - bool fail = false; - - if (y == 15) { - // Failed if land on top level, or ceiling dropped to one level - fail = true; - } - - if (_variableArray[432] > 2 && y + _variableArray[432] > 16) { - // above landed block - fail = true; - } - - int flag = 1000 + z * 128 + y * 8 + x; - - if (type == 0) { - if (y != 0 && _variableArray[flag - 8] == 0 && _variableArray[flag + 1 - 8] == 0 && _variableArray[flag + 2 - 8] == 0) { - return true; - } - - _variableArray[flag] = block; - _variableArray[flag + 1] = block; - _variableArray[flag + 2] = block; - - if (fail) { - _variableArray[254] = 6070; - } else { - // Start next block - sendSync(6007); - } - return false; - } - - if (y != 0 && _variableArray[flag - 8] == 0 && _variableArray[flag + 128 - 8] == 0 && _variableArray[flag + 256 - 8] == 0) { - return true; - } - - _variableArray[flag] = block; - _variableArray[flag +128] = block; - _variableArray[flag + 256] = block; - - if (fail) { - _variableArray[254] = 6070; - } else { - // Start next block - sendSync(6007); - } - return false; -} - -} // End of namespace AGOS |