public static void makeitfall(short i) { spritetype s = Engine.board.sprite[i]; int hz = 0; int lz = 0; int c; if (floorspace(s.sectnum) != 0) { c = 0; } else { if (ceilingspace(s.sectnum) != 0 || Engine.board.sector[s.sectnum].lotag == 2) { c = gc / 6; } else { c = gc; } } if ((s.statnum == 1 || s.statnum == 10 || s.statnum == 2 || s.statnum == 6)) { Engine.board.getzrange(s.x, s.y, s.z - ((1 << 8)), s.sectnum, ref hittype[i].ceilingz, ref hz, ref hittype[i].floorz, ref lz, 127, (((1) << 16) + 1)); } else { hittype[i].ceilingz = Engine.board.sector[s.sectnum].ceilingz; hittype[i].floorz = Engine.board.sector[s.sectnum].floorz; } if (s.z < hittype[i].floorz - ((1 << 8))) { if (Engine.board.sector[s.sectnum].lotag == 2 && s.zvel > 3122) { s.zvel = 3144; } if (s.zvel < 6144) { s.zvel += (short)c; } else { s.zvel = 6144; } s.z += s.zvel; } if (s.z >= hittype[i].floorz - ((1 << 8))) { s.z = hittype[i].floorz - (1 << 8); s.zvel = 0; } }
public static void getglobalz(short i) { int hz = 0; int lz = 0; int zr = 0; spritetype s = Engine.board.sprite[i]; if (s.statnum == 10 || s.statnum == 6 || s.statnum == 2 || s.statnum == 1 || s.statnum == 4) { if (s.statnum == 4) { zr = 4; } else { zr = 127; } Engine.board.getzrange(s.x, s.y, s.z - ((1 << 8)), s.sectnum, ref hittype[i].ceilingz, ref hz, ref hittype[i].floorz, ref lz, zr, (((1) << 16) + 1)); if ((lz & 49152) == 49152 && (Engine.board.sprite[lz & (DefineConstants.MAXSPRITES - 1)].cstat & 48) == 0) { lz &= (DefineConstants.MAXSPRITES - 1); if (badguy(Engine.board.sprite[lz]) != 0 && Engine.board.sprite[lz].pal != 1) { if (s.statnum != 4) { hittype[i].dispicnum = -4; // No shadows on actors s.xvel = -256; ssp(i, (uint)(((1) << 16) + 1)); } } else if (Engine.board.sprite[lz].picnum == DefineConstants.APLAYER && badguy(s) != 0) { hittype[i].dispicnum = -4; // No shadows on actors s.xvel = -256; ssp(i, (uint)(((1) << 16) + 1)); } else if (s.statnum == 4 && Engine.board.sprite[lz].picnum == DefineConstants.APLAYER) { if (s.owner == lz) { hittype[i].ceilingz = Engine.board.sector[s.sectnum].ceilingz; hittype[i].floorz = Engine.board.sector[s.sectnum].floorz; } } } } else { hittype[i].ceilingz = Engine.board.sector[s.sectnum].ceilingz; hittype[i].floorz = Engine.board.sector[s.sectnum].floorz; } }
public static short furthestcanseepoint(short i, spritetype ts, ref int dax, ref int day) { short j = 0; int hitsect = 0; short hitwall = 0; short hitspr = 0; short angincs = 0; short tempang = 0; int hx = 0; //, d, cd, ca,tempx,tempy,cx,cy; int hy = 0; int hz = 0; int d = 0; int da = 0; spritetype s = Engine.board.sprite[i]; if ((hittype[g_i].count & 63) != 0) { return(-1); } if (ud.multimode < 2 && ud.player_skill < 3) { angincs = (short)(2048 / 2); } else { angincs = (short)(2048 / (1 + (Engine.krand() & 1))); } for (j = ts.ang; j < (2048 + ts.ang); j += (short)(angincs - (Engine.krand() & 511))) { Engine.board.hitscan(ts.x, ts.y, ts.z - (16 << 8), ts.sectnum, Engine.table.sintable[(j + 512) & 2047], Engine.table.sintable[j & 2047], (int)(16384 - (Engine.krand() & 32767)), ref hitsect, ref hitwall, ref hitspr, ref hx, ref hy, ref hz, (((256) << 16) + 64)); d = pragmas.klabs(hx - ts.x) + pragmas.klabs(hy - ts.y); da = pragmas.klabs(hx - s.x) + pragmas.klabs(hy - s.y); if (d < da) { if (Engine.board.cansee(hx, hy, hz, (short)hitsect, s.x, s.y, s.z - (16 << 8), s.sectnum)) { dax = hx; day = hy; return((short)hitsect); } } } return(-1); }
public static int dodge(spritetype s) { int i; int bx; int by; int mx; int my; int bxvect; int byvect; int mxvect; int myvect; int d; mx = s.x; my = s.y; mxvect = Engine.table.sintable[(s.ang + 512) & 2047]; myvect = Engine.table.sintable[s.ang & 2047]; for (i = Engine.board.headspritestat[4]; i >= 0; i = Engine.board.nextspritestat[i]) //weapons list { if (Engine.board.sprite[i].owner == i || Engine.board.sprite[i].sectnum != s.sectnum) { continue; } bx = Engine.board.sprite[i].x - mx; by = Engine.board.sprite[i].y - my; bxvect = Engine.table.sintable[(Engine.board.sprite[i].ang + 512) & 2047]; byvect = Engine.table.sintable[Engine.board.sprite[i].ang & 2047]; if (mxvect * bx + myvect * by >= 0) { if (bxvect * bx + byvect * by < 0) { d = bxvect * by - byvect * bx; if (pragmas.klabs(d) < 65536 * 64) { s.ang -= (short)(512 + (Engine.krand() & 1024)); return(1); } } } } return(0); }
public static short furthestangle(short i, short angs) { short j = 0; int hitsect = 0; short hitwall = 0; short hitspr = 0; short furthest_angle = 0; short angincs = 0; int hx = 0; int hy = 0; int hz = 0; int d = 0; int greatestd = 0; spritetype s = Engine.board.sprite[i]; greatestd = -(1 << 30); angincs = (short)(2048 / angs); if (s.picnum != DefineConstants.APLAYER) { if ((hittype[g_i].count & 63) > 2) { return((short)(s.ang + 1024)); } } for (j = s.ang; j < (2048 + s.ang); j += angincs) { Engine.board.hitscan(s.x, s.y, s.z - (8 << 8), s.sectnum, Engine.table.sintable[(j + 512) & 2047], Engine.table.sintable[j & 2047], 0, ref hitsect, ref hitwall, ref hitspr, ref hx, ref hy, ref hz, (((256) << 16) + 64)); d = pragmas.klabs(hx - s.x) + pragmas.klabs(hy - s.y); if (d > greatestd) { greatestd = d; furthest_angle = j; } } return((short)(furthest_angle & 2047)); }