www.pudn.com > BlackCross.rar > gameObjects.java
import java.io.InputStream;
import javax.microedition.lcdui.Graphics;
class gameObjects
{
boolean SCREENSHOT_MODE;
int lasthit_counter;
int lasthit_obj;
boolean latestFailed;
int latestType;
int latestNumber;
int latestSize[];
sinCosTab gradTab;
objectScripts script[];
imageObjects images;
gameObjectInits inits;
final int NO_OBJ = 15;
gameObject objects[][];
int levelEndCounter;
int main_x;
int main_y;
int mainEnterX;
int mainEnterY;
int mainEnterMode;
int memc;
int memTime;
int main_lives;
int main_score;
int main_exp;
int main_level;
boolean main_levelup;
int main_levelup_counter;
boolean main_gameover;
boolean main_levelend;
int gameOverCounter;
int idCounter;
public gameObjects(boolean flag)
{
SCREENSHOT_MODE = false;
lasthit_counter = 50;
lasthit_obj = -1;
latestFailed = false;
latestSize = new int[2];
gradTab = new sinCosTab();
script = new objectScripts[25];
images = new imageObjects();
inits = new gameObjectInits();
objects = new gameObject[5][15];
levelEndCounter = -1;
mainEnterMode = 0;
memc = 0;
memTime = 35;
main_exp = 0;
main_level = 1;
main_levelup = false;
main_levelup_counter = 0;
gameOverCounter = 0;
idCounter = 0;
SCREENSHOT_MODE = flag;
for(int i = 0; i < 15; i++)
{
objects[0][i] = new gameObject();
objects[1][i] = new gameObject();
objects[2][i] = new gameObject();
objects[3][i] = new gameObject();
objects[4][i] = new gameObject();
}
for(int j = 0; j < 25; j++)
script[j] = new objectScripts();
gameOverCounter = 0;
}
public int playerState()
{
if(main_gameover)
{
gameOverCounter++;
if(gameOverCounter == 1)
return 1;
}
return 0;
}
public void makeMainEnter()
{
memc = 0;
mainEnterMode = memTime;
main_x = mainEnterX;
main_y = mainEnterY;
add(0, -1, main_x, main_y, -1, -1);
objects[4][0].animationCurrent = 1;
}
public void loadAndInit(int i, int j)
{
levelEndCounter = -1;
for(int k = 0; k < 15; k++)
{
objects[0][k].status = 0;
objects[1][k].status = 0;
objects[2][k].status = 0;
objects[3][k].status = 0;
objects[4][k].status = 0;
}
inits.load(i, j);
for(int l = 0; l < 40; l++)
if(inits.inits[l].imageNumber != -1)
images.load(inits.inits[l].imageNumber, inits.inits[l].imageFileNumber, inits.inits[l].numberOfAnimations);
try
{
byte abyte0[] = new byte[90];
InputStream inputstream = getClass().getResourceAsStream("/sets/script" + i + ".set");
inputstream.read(abyte0, 0, 2);
int i1 = (abyte0[0] * abyte0[1]) / 83;
for(int k1 = 0; k1 < i1; k1++)
{
inputstream.read(abyte0, 0, 83);
byte byte0 = abyte0[0];
script[byte0].initSpeed = abyte0[1];
script[byte0].initDir = abyte0[2];
for(int j1 = 0; j1 < 5; j1++)
{
script[byte0].sub[j1].time = abyte0[j1 * 16 + 3];
script[byte0].sub[j1].speedChange = abyte0[j1 * 16 + 4];
script[byte0].sub[j1].dirChange = abyte0[j1 * 16 + 5];
script[byte0].sub[j1].startCreation = abyte0[j1 * 16 + 6];
script[byte0].sub[j1].stopCreation = abyte0[j1 * 16 + 7];
script[byte0].sub[j1].aiming = abyte0[j1 * 16 + 8];
script[byte0].sub[j1].jumpTo = abyte0[j1 * 16 + 9];
script[byte0].sub[j1].facChange = abyte0[j1 * 16 + 10];
script[byte0].sub[j1].kill = abyte0[j1 * 16 + 11];
script[byte0].sub[j1].posXChange = abyte0[j1 * 16 + 12];
script[byte0].sub[j1].posYChange = abyte0[j1 * 16 + 13];
}
}
inputstream.close();
gameOverCounter = 0;
}
catch(Exception exception) { }
}
public void processAll()
{
processArray(0);
processArray(1);
processArray(4);
processArray(3);
processArray(2);
}
public void processArray(int i)
{
int k = i;
for(int j = 0; j < 15; j++)
{
if(objects[k][j].status == 0)
continue;
if(k == 4 && j == 0)
{
objects[k][j].position[0] = main_x * 64;
objects[k][j].position[1] = main_y * 64;
if(mainEnterMode > 0)
{
memc++;
if(memc == 2)
memc = 0;
if(mainEnterMode > memTime - 10)
main_y -= 5;
mainEnterMode--;
}
process(k, j);
} else
{
runScript(k, j);
process(k, j);
}
}
}
private void process(int i, int j)
{
int k = objects[i][j].speed / 30;
int l = objects[i][j].direction;
int i1 = objects[i][j].facing;
if(l >= 1350)
l -= 1350;
if(l < 0)
l += 1350;
if(i1 >= 1350)
i1 -= 1350;
if(i1 < 0)
i1 += 1350;
objects[i][j].facing = i1;
objects[i][j].direction = l;
l /= 15;
objects[i][j].position[0] += sinCosTab.gradTab[l][0] * k;
objects[i][j].position[1] += sinCosTab.gradTab[l][1] * k;
if(objects[i][j].animationType != 0)
{
objects[i][j].animationCounter++;
if(objects[i][j].animationCounter >= objects[i][j].animationSpeed)
{
objects[i][j].animationCounter = 0;
objects[i][j].animationCurrent++;
if(objects[i][j].animationCurrent == objects[i][j].animationMax)
{
if(objects[i][j].animationType == 1)
objects[i][j].animationCurrent = 0;
if(objects[i][j].animationType == 3)
{
objects[i][j].status = 0;
return;
}
}
}
}
if(objects[i][j].hierarchyType == 1)
{
int j1 = objects[i][j].motherTyp;
int l1 = objects[i][j].motherNo;
if(objects[i][j].motherID != objects[j1][l1].ID || objects[j1][l1].status == 0)
{
objects[i][j].status = 0;
return;
}
objects[i][j].position[0] -= objects[i][j].motherPosition[0];
objects[i][j].position[1] -= objects[i][j].motherPosition[1];
objects[i][j].position[0] += objects[j1][l1].position[0];
objects[i][j].position[1] += objects[j1][l1].position[1];
objects[i][j].motherPosition[0] = objects[j1][l1].position[0];
objects[i][j].motherPosition[1] = objects[j1][l1].position[1];
}
objects[i][j].screenPos[0] = objects[i][j].position[0] / 64;
objects[i][j].screenPos[1] = objects[i][j].position[1] / 64;
if(objects[i][j].clip == 1)
{
if(objects[i][j].screenPos[0] + objects[i][j].size[0] < 0 || objects[i][j].screenPos[0] - objects[i][j].size[0] > 128 || objects[i][j].screenPos[1] + objects[i][j].size[1] < 0 || objects[i][j].screenPos[1] - objects[i][j].size[1] > 128)
{
objects[i][j].status = 0;
return;
}
} else
if(objects[i][j].clip == 2 && (objects[i][j].screenPos[0] + objects[i][j].size[0] + 8 < 0 || objects[i][j].screenPos[0] - objects[i][j].size[0] - 8 > 128 || objects[i][j].screenPos[1] + objects[i][j].size[1] + 8 < 0 || objects[i][j].screenPos[1] - objects[i][j].size[1] - 8 > 128))
{
objects[i][j].status = 0;
return;
}
if(i != 0 && i != 4)
return;
for(int k1 = 0; k1 < 5; k1++)
{
int l2 = objects[i][j].creations[k1].type;
int i3 = l2;
l2 &= 7;
if(!objects[i][j].creations[k1].active || l2 != 1 && l2 != 4 || objects[i][j].creations[k1].init == -1)
continue;
if(l2 == 4)
objects[i][j].creations[k1].active = false;
objects[i][j].creations[k1].counter++;
if(l2 != 4 && objects[i][j].creations[k1].counter < objects[i][j].creations[k1].timer)
continue;
i3 &= 0x38;
objects[i][j].creations[k1].counter = 0;
int i2 = objects[i][j].creations[k1].init;
int j2 = objects[i][j].creations[k1].offset[0] + objects[i][j].screenPos[0];
int k2 = objects[i][j].creations[k1].offset[1] + objects[i][j].screenPos[1];
add(i2, -1, j2, k2, i, j);
if(latestFailed)
continue;
if(i3 == 8)
{
int i4 = objects[latestType][latestNumber].position[0] - objects[4][0].position[0];
int k4 = objects[latestType][latestNumber].position[1] - objects[4][0].position[1];
System.out.println(i4+","+k4);
int j3 = gradTab.getRotationFor(i4, k4);
System.out.println(j3);
objects[latestType][latestNumber].direction = j3 * 15;
} else
if(i3 == 16)
{
int k3 = objects[i][j].facing + objects[latestType][latestNumber].facing;
objects[latestType][latestNumber].direction = k3;
objects[latestType][latestNumber].facing = k3;
if(objects[latestType][latestNumber].facing < 0)
objects[latestType][latestNumber].facing += 1350;
if(objects[latestType][latestNumber].facing >= 1350)
objects[latestType][latestNumber].facing -= 1350;
if(objects[latestType][latestNumber].direction < 0)
objects[latestType][latestNumber].direction += 1350;
if(objects[latestType][latestNumber].direction >= 1350)
objects[latestType][latestNumber].direction -= 1350;
}
if(objects[i][j].creations[k1].offsetRotation != -99)
{
int l3 = objects[latestType][latestNumber].direction;
l3 += objects[i][j].creations[k1].offsetRotation * 15;
objects[latestType][latestNumber].direction = l3;
}
}
}
private void runScript(int i, int j)
{
int k = objects[i][j].script;
if(k == -1)
return;
int l = objects[i][j].scriptPos;
if(script[k].sub[l].time != 0)
{
if(objects[i][j].scriptCounter == 0)
{
if(script[k].sub[l].startCreation != -1)
{
int i1 = script[k].sub[l].startCreation;
int k1 = i1 & 1;
int i2 = i1 & 2;
int k2 = i1 & 4;
int i3 = i1 & 8;
int k3 = i1 & 0x10;
if(k1 == 1)
objects[i][j].creations[0].active = true;
if(i2 == 2)
objects[i][j].creations[1].active = true;
if(k2 == 4)
objects[i][j].creations[2].active = true;
if(i3 == 8)
objects[i][j].creations[3].active = true;
if(k3 == 16)
objects[i][j].creations[4].active = true;
}
if(script[k].sub[l].stopCreation != -1)
{
int j1 = script[k].sub[l].stopCreation;
int l1 = j1 & 1;
int j2 = j1 & 2;
int l2 = j1 & 4;
int j3 = j1 & 8;
int l3 = j1 & 0x10;
if(l1 == 1)
objects[i][j].creations[0].active = false;
if(j2 == 2)
objects[i][j].creations[1].active = false;
if(l2 == 4)
objects[i][j].creations[2].active = false;
if(j3 == 8)
objects[i][j].creations[3].active = false;
if(l3 == 16)
objects[i][j].creations[4].active = false;
}
if(script[k].sub[l].kill != 0)
{
objects[i][j].status = 0;
return;
}
}
objects[i][j].facing += script[k].sub[l].facChange;
objects[i][j].direction += script[k].sub[l].dirChange;
objects[i][j].speed += script[k].sub[l].speedChange;
objects[i][j].position[0] += script[k].sub[l].posXChange * 64;
objects[i][j].position[1] += script[k].sub[l].posYChange * 64;
objects[i][j].scriptCounter++;
if(objects[i][j].scriptCounter == script[k].sub[l].time)
{
objects[i][j].scriptCounter = 0;
if(script[k].sub[l].jumpTo != -1)
{
objects[i][j].scriptCounter = 0;
objects[i][j].scriptPos = script[k].sub[l].jumpTo;
l = objects[i][j].scriptPos;
} else
{
objects[i][j].scriptPos++;
if(objects[i][j].scriptPos == 5)
objects[i][j].script = -1;
}
}
} else
{
objects[i][j].script = -1;
}
}
public void doCreation(int i, int j, int k)
{
for(int l = 0; l < 5; l++)
if(objects[i][j].creations[l].type == k)
{
int i1 = objects[i][j].creations[l].init;
int j1 = objects[i][j].creations[l].offset[0] + objects[i][j].screenPos[0];
int k1 = objects[i][j].creations[l].offset[1] + objects[i][j].screenPos[1];
add(i1, -1, j1, k1, i, j);
}
}
private boolean obj2obj(int i, int j, int k, int l)
{
boolean flag = false;
int i2 = objects[i][j].colSize[0] * 64;
int j2 = objects[k][l].colSize[0] * 64;
int i1 = objects[i][j].position[0] - i2;
int k1 = objects[k][l].position[0] - j2;
int j1 = objects[i][j].position[0] + i2;
int l1 = objects[k][l].position[0] + j2;
if(i1 >= k1 && i1 <= l1 || j1 >= k1 && j1 <= l1)
flag = true;
else
if(k1 >= i1 && k1 <= j1 || l1 >= i1 && l1 <= j1)
flag = true;
if(!flag)
return false;
i2 = objects[i][j].colSize[1] * 64;
j2 = objects[k][l].colSize[1] * 64;
i1 = objects[i][j].position[1] - i2;
k1 = objects[k][l].position[1] - j2;
j1 = objects[i][j].position[1] + i2;
l1 = objects[k][l].position[1] + j2;
flag = false;
if(i1 >= k1 && i1 <= l1 || j1 >= k1 && j1 <= l1)
flag = true;
else
if(k1 >= i1 && k1 <= j1 || l1 >= i1 && l1 <= j1)
flag = true;
return flag;
}
private void checkCol(int i, int j)
{
for(int k = 0; k < 15; k++)
{
if(objects[i][k].status == 0)
continue;
for(int l = 0; l < 15; l++)
{
if(objects[j][l].status != 0 && obj2obj(i, k, j, l))
if(j == 1)
{
main_exp++;
if(main_exp >= 63 * main_level)
{
main_exp = 0;
main_level++;
main_levelup = true;
}
doCreation(j, l, 2);
if(objects[i][k].hitsNum != -99)
{
objects[i][k].hitsNum -= objects[j][l].hitsNum;
if(objects[i][k].hitsNum <= 0)
{
doCreation(i, k, 2);
objects[i][k].status = 0;
main_score += objects[i][k].score * 3;
} else
{
lasthit_counter = 0;
lasthit_obj = k;
}
}
objects[j][l].status = 0;
} else
{
doCreation(j, l, 2);
if(objects[i][k].hitsNum != -99)
{
objects[i][k].hitsNum--;
if(objects[i][k].hitsNum <= 0)
{
doCreation(i, k, 2);
objects[i][k].status = 0;
}
}
objects[j][l].status = 0;
main_lives--;
if(main_lives >= 0)
makeMainEnter();
else
main_gameover = true;
}
if(j == 4)
l = 20;
}
}
}
public void collisionDetection()
{
checkCol(0, 1);
if(mainEnterMode == 0 && !main_levelend && !SCREENSHOT_MODE)
{
checkCol(0, 4);
checkCol(2, 4);
}
}
public void add(int i, int j, int k, int l, int i1, int j1)
{
int k1 = inits.inits[i].type;
int l1 = i;
if(l1 == 39)
{
levelEndCounter = 0;
return;
}
int i2 = 0;
if(j1 != -1 && i1 == k1)
i2 = j1;
for(int j2 = i2; j2 < 15; j2++)
if(objects[k1][j2].status == 0)
{
objects[k1][j2].ID = idCounter;
idCounter++;
objects[k1][j2].status = 1;
objects[k1][j2].imageNumber = inits.inits[l1].imageNumber;
objects[k1][j2].screenPos[0] = k;
objects[k1][j2].screenPos[1] = l;
objects[k1][j2].position[0] = k * 64;
objects[k1][j2].position[1] = l * 64;
objects[k1][j2].clip = inits.inits[l1].clip;
objects[k1][j2].hierarchyType = inits.inits[l1].hierarchy;
if(inits.inits[l1].hierarchy != 0)
{
objects[k1][j2].hierarchyType = inits.inits[l1].hierarchy;
objects[k1][j2].motherTyp = i1;
objects[k1][j2].motherNo = j1;
objects[k1][j2].motherID = objects[i1][j1].ID;
objects[k1][j2].motherPosition[0] = objects[i1][j1].position[0];
objects[k1][j2].motherPosition[1] = objects[i1][j1].position[1];
}
if(objects[k1][j2].imageNumber == -1)
{
objects[k1][j2].size[0] = 0;
objects[k1][j2].size[1] = 0;
} else
{
objects[k1][j2].size[0] = images.images[objects[k1][j2].imageNumber].size[0];
objects[k1][j2].size[1] = images.images[objects[k1][j2].imageNumber].size[1];
}
objects[k1][j2].script = j;
objects[k1][j2].scriptPos = 0;
objects[k1][j2].scriptCounter = 0;
if(j != -1)
{
objects[k1][j2].direction = script[j].initDir * 15;
objects[k1][j2].facing = script[j].initDir * 15;
objects[k1][j2].speed = script[j].initSpeed * 30;
} else
{
int k2 = inits.inits[l1].script;
if(k2 != -1)
{
objects[k1][j2].script = k2;
objects[k1][j2].direction = script[k2].initDir * 15;
objects[k1][j2].facing = script[k2].initDir * 15;
objects[k1][j2].speed = script[k2].initSpeed * 30;
} else
{
objects[k1][j2].facing = 0;
objects[k1][j2].direction = 0;
objects[k1][j2].speed = 0;
}
}
if(inits.inits[l1].speed != -99)
objects[k1][j2].speed = inits.inits[l1].speed * 30;
objects[k1][j2].colSize[0] = inits.inits[l1].colSize[0];
objects[k1][j2].colSize[1] = inits.inits[l1].colSize[1];
objects[k1][j2].hitsNum = inits.inits[l1].hits;
objects[k1][j2].hitsTotal = inits.inits[l1].hits;
objects[k1][j2].animationType = inits.inits[l1].animType;
objects[k1][j2].animationSpeed = inits.inits[l1].animSpeed;
objects[k1][j2].animationMax = inits.inits[l1].numberOfAnimations;
objects[k1][j2].animationCurrent = 0;
objects[k1][j2].animationCounter = -1;
for(int l2 = 0; l2 < 5; l2++)
{
objects[k1][j2].creations[l2].type = inits.inits[l1].creations[l2].type;
objects[k1][j2].creations[l2].init = inits.inits[l1].creations[l2].init;
objects[k1][j2].creations[l2].offset[0] = inits.inits[l1].creations[l2].offset[0];
objects[k1][j2].creations[l2].offset[1] = inits.inits[l1].creations[l2].offset[1];
objects[k1][j2].creations[l2].timer = inits.inits[l1].creations[l2].timer;
objects[k1][j2].creations[l2].counter = 0;
objects[k1][j2].creations[l2].active = false;
objects[k1][j2].creations[l2].offsetRotation = inits.inits[l1].creations[l2].offsetRotation;
if(objects[k1][j2].creations[l2].type == 3)
{
objects[k1][j2].creations[l2].type = 4;
objects[k1][j2].creations[l2].active = true;
}
}
objects[k1][j2].score = inits.inits[l1].score;
latestType = k1;
latestNumber = j2;
latestSize[0] = objects[k1][j2].size[0];
latestSize[1] = objects[k1][j2].size[1];
latestFailed = false;
return;
}
latestFailed = true;
}
public void drawArray(Graphics g, int i)
{
for(int j = 0; j < 15; j++)
if(objects[i][j].status != 0)
images.draw(g, objects[i][j].imageNumber, objects[i][j].animationCurrent, objects[i][j].screenPos[0], objects[i][j].screenPos[1]);
}
public void draw(Graphics g)
{
drawArray(g, 0);
drawArray(g, 1);
if(mainEnterMode <= 0 || memc != 0)
drawArray(g, 4);
drawArray(g, 3);
drawArray(g, 2);
}
}