i luffs yeww
2010-05-07 02:37:36
Except for one big thing that I didn't know what to do, but now I think I do, but it's almost midnight and I have to wake up in a couple hours so I think I should rest.
If nobody else finishes this up soon, I can finish the rest. :p
(By the way, I really didn't do anything. All credit goes to TRiLeZ. :) I'm just posting it.)
private static class Render {
static int absoluteX1 = 0, absoluteX2 = 0;
static int absoluteY1 = 0, absoluteY2 = 0;
static int xMultiplier = 512, yMultiplier = 512;
static int zNear = 50, zFar = 3500;
}
private static class RenderData {
static int xOff = 0, xX = 32768, xY = 0, xZ = 0;
static int yOff = 0, yX = 0, yY = 32768, yZ = 0;
static int zOff = 0, zX = 0, zY = 0, zZ = 32768;
}
public boolean onScreen(final Point point) {
final int x = point.x, y = point.y;
return (x > 4) && (x < this.bot.getRsClient().getWidth() - 253)
&& (y > 4) && (y < this.bot.getRsClient().getHeight() - 169);
}
public Point tileToScreen(int x, int y, int height) {
Tile t = getLocalPos(new Tile(x, y));
Point p = worldToScreen(t.x, t.y, 0);
return p;
}
/*Wasn't sure what to do for this.*/
private void updateRenderInfo() {
try {
RenderData.xOff = getRenderDataInt(Constants.getXOff);
RenderData.xX = getRenderDataInt(Constants.getXX);
RenderData.xY = getRenderDataInt(Constants.getXY);
RenderData.xZ = getRenderDataInt(Constants.getXZ);
RenderData.yOff = getRenderDataInt(Constants.getYOff);
RenderData.yX = getRenderDataInt(Constants.getYX);
RenderData.yY = getRenderDataInt(Constants.getYY);
RenderData.yZ = getRenderDataInt(Constants.getYZ);
RenderData.zOff = getRenderDataInt(Constants.getZOff);
RenderData.zX = getRenderDataInt(Constants.getZX);
RenderData.zY = getRenderDataInt(Constants.getZY);
RenderData.zZ = getRenderDataInt(Constants.getZZ);
Render.absoluteX1 = getRenderInt(Constants.getAbsoluteX1);
Render.absoluteX2 = getRenderInt(Constants.getAbsoluteX2);
Render.absoluteY1 = getRenderInt(Constants.getAbsoluteY1);
Render.absoluteY2 = getRenderInt(Constants.getAbsoluteY2);
Render.xMultiplier = getRenderInt(Constants.getXMultiplier);
Render.yMultiplier = getRenderInt(Constants.getYMultiplier);
Render.zNear = getRenderInt(Constants.getZNear);
Render.zFar = getRenderInt(Constants.getZFar);
} catch (Exception e) {
e.printStackTrace();
}
}
private int getTileHeight(int x, int y) {
int i = x >> getScale();
int i1 = y >> getScale();
if ((i < 0) || (i1 < 0) || (i > getPlaneSize("x") - 1)
|| (i1 > getPlaneSize("z") - 1))
return 0;
int i2 = x & getPlaneSize("y") - 1;
int i3 = y & getPlaneSize("y") - 1;
int i4 = getTileHeights()[i][i1] * (getPlaneSize("y") - i2)
+ getTileHeights()[(i + 1)][i1] * i2 >> getScale();
int i5 = getTileHeights()[i][(i1 + 1)] * (getPlaneSize("y") - i2)
+ getTileHeights()[(i + 1)][(i1 + 1)] * i2 >> getScale();
return (i4 * (getPlaneSize("y") - i3) + i5 * i3 >> getScale());
}
private Point w2s(int localX, int tileHeight, int localY) {
updateRenderInfo();
int i = RenderData.zOff
+ (RenderData.zX * localX + RenderData.zY * tileHeight
+ RenderData.zZ * localY >> 15);
if ((i < Render.zNear) || (i > Render.zFar)) {
return new Point(-1, -1);
}
int j = Render.xMultiplier
* (RenderData.xOff + (RenderData.xX * localX + RenderData.xY
* tileHeight + RenderData.xZ * localY >> 15)) / i;
int k = Render.yMultiplier
* (RenderData.yOff + (RenderData.yX * localX + RenderData.yY
* tileHeight + RenderData.yZ * localY >> 15)) / i;
if ((j >= Render.absoluteX1) && (j <= Render.absoluteX2)
&& (k >= Render.absoluteY1) && (k <= Render.absoluteY2)) {
return new Point(j - Render.absoluteX1, k - Render.absoluteY1);
}
return new Point(-1, -1);
}
private Point worldToScreen(final int x, final int y, final int height) {
int tileHeight = getTileHeight(x, y) - height;
Point p = w2s(x, tileHeight, y);
if ((p != null) && onScreen(p))
return p;
return new Point(-1, -1);
}
private int getRenderInt(String hookName) {
Object toolkit = this.me.getFieldObject(Constants.getToolkit);
return this.me.getFieldInt(hookName, toolkit);
}
private int getRenderDataInt(String hookName) {
Object toolkit = this.me.getFieldObject(Constants.getToolkit);
Object viewport = this.me.getFieldObject(Constants.getViewport, toolkit);
return this.me.getFieldInt(hookName, viewport);
}
private Tile getLocalPos(Tile globalPos) {
int x = (int) ((globalPos.x - this.me.getBaseX() + 0.5) * 128);
int y = (int) ((globalPos.y - this.me.getBaseY() + 0.5) * 128);
return new Tile(x, y);
}
private int[][] getTileHeights() {
Object[] planes = (Object[]) this.me
.getFieldObject(Constants.getPlanes);
Object actPlaneInstance = planes[this.me.getPlayerPlane()];
return this.me.getFieldInt2dArray(Constants.getTileHeights,
actPlaneInstance);
}
private int getScale() {
try {
Object[] planes = (Object[]) this.me
.getFieldObject(Constants.getPlanes);
Object actPlaneInstance = planes[this.me.getPlayerPlane()];
return this.me.getFieldInt(Constants.getScale, actPlaneInstance);
} catch (Exception e) {
}
return -1;
}
private int getPlaneSize(String dimension) {
try {
String str = "";
if (dimension.equalsIgnoreCase("x"))
str = Constants.getXSize;
else if (dimension.equalsIgnoreCase("y"))
str = Constants.getYSize;
else if (dimension.equalsIgnoreCase("z"))
str = Constants.getZSize;
else
return -1;
Object[] planes = (Object[]) this.me
.getFieldObject(Constants.getPlanes);
Object actPlaneInstance = planes[this.me.getPlayerPlane()];
return this.me.getFieldInt(str, actPlaneInstance);
} catch (Exception e) {
}
return -1;
}
That's what TRiLeZ uses, hopefully he doesn't mind me posting. Only posting so that people can see what needs to be changed. ;)
procedure Render;
var
AbsoluteX1, AbsoluteX2, AbsoluteY1, AbsoluteY2,
XMultiplier, YMultiplier, ZNear, ZFar: Integer;
begin
AbsoluteX1 := 0;
AbsoluteX2 := 0;
AbsoluteY1 := 0;
AbsoluteY2 := 0;
XMultiplier := 512;
YMultiplier := 512;
ZNear := 50;
ZFar := 3500;
end;
procedure RenderData;
var
XOff, XX, XY, XZ, YOff, YX, YY, YZ, ZOff, ZX, ZY, ZZ: Integer;
begin
XOff := 0;
XX := 32768;
XY := 0;
XZ := 0;
YOff := 0;
YX := 0;
YY := 32768;
YZ := 0;
ZOff := 0;
ZX := 0;
ZY := 0;
ZZ := 32768;
end;
function OnScreen(Point: TPoint): Boolean;
var
x, y: Integer;
begin
x := Point.x;
y := Point.y;
Result := (((x > 4) and (x < 511)) and ((y > 4) and (y < 333)));
end;
function TileToScreen(x, y, Height: Integer): TPoint;
var
Tile: TPoint;
begin
Tile := GetMyPos;
PointToTile(Tile);
Result := WorldToScreen(Tile.x, Tile.y, 0);//Not sure.
end;
procedure UpdateRenderInfo;
begin
//I dunno.
end;
function GetTileHeight(x, y: Integer): Integer;
var
i, i1, i2, i3, i4, i5: Integer;
begin
i := x shr GetScale;
i1 := y shr GetScale;
if ((i < 0) or (i1 < 0) or (i > GetPlaneSize('x') - 1) or (i1 > GetPlaneSize('z') - 1))then
Result := 0;
i2 := x + GetPlaneSize('y') - 1;
i3 := y + GetPlaneSize('y') - 1;
i4 := GetTileHeights[i][i1] * (GetPlaneSize('y') - i2) + GetTileHeights[(i + 1)][i1] * i2 shr GetScale;
i5 := GetTileHeights[i][(i1 + 1)] * GetPlaneSize('y') - i2) + GetTileHeights[(i + 1)][(i1 + 1)] * i2 shr GetScale;
Result := (i4 * (GetPlaneSize('y') - i3) + i5 * i3 shr GetScale);
end;
function W2S(LocalX, LocalY, TileHeight): TPoint;
var
i, j, k: Integer;
begin
i := RenderData.ZOff + (RenderData.ZX * LocalX + RanderData.ZY * TileHeight + RenderData.ZZ * LocalY shr 15));
if((i < Render.ZNear) or (i > Rander.ZFar))then
begin
Result.x := -1;
Result.y := -1;
end;
j := Render.XMultiplier * (RanderData.XOff + (RenderData.XX * LocalX + RenderData.XY * TileHeight + RenderData.XZ * LocalY shr 15)) / i;
k := Render.YMultiplier * (RenderData.YOff + (RenderData.YX * LocalX + RenderData.YY * TileHeight + RenderData.YZ * LocalY shr 15)) / i;
if((j >= Render.AbsoluteX1) and (j <= Render.AbsoluteX2) and (k >= Render.AbsoluteY1) and (k <= Render.AbsoluteY2))then
begin
Result.x := (j - Render.AbsoluteX1);
Result.y := (k - Render.AbsoluteY1);
end;
end;
function WorldToScreen(x, y, Height: Integer): TPoint;
var
TileHeight: Integer;
p: TPoint;
begin
TileHeight := GetTileHeight(x, y) - Height;
p := W2S(x, TileHeight, y);
if((p <> null) and OnScreen(p))then
begin
Result.x := p.x;
Result.y := p.y;
end;
else begin
Result.x := -1;
Result.y := -1;
end;
end;
function GetRenderInt(HookName: String): Integer;//I think it's an integer..
{var
ToolKit: Object}
begin
//ToolKit := GetFieldObject(Constants.GetToolKit);
Result := GetFieldInt(HookName, ToolKit);
end;
function GetRenderDataInt(HookName: String): Integer;//I think.
{var
ToolKit, ViewPort: Object;}
begin
//ToolKit := GetFieldObject(Constants.GetToolKit);
//ViewPort := GetFieldObjects(Constants.GetViewPort);
Result := GetFieldInt(HookName, ViewPort);
end;
function GetLocalPos(GlobalPos: TTile): TTile;
var
p: TPoint;
begin
p.x := ((GlobalPos.x - GetBaseX + 0.5) * 128);
p.y := ((GlobalPos.x - GetBaseX + 0.5) * 128);
Result := PointToTile(p);
end;
function GetTileHeights: array of array of Integer;
{var
Planes, ActPlaneInstance: Object;}
begin
//Planes := GetFieldObject(Constants.GetPlanes);
//ActPlaneInstance := Planes[GetPlayerPlane];
Result := GetFieldInt2dArray(Constants.GetTileHeights, ActPlaneInstance);
end;
function GetScale: Integer;
{var
Planes, ActPlaneInstance: Object;}
begin
//try
//Planes := GetFieldObject(Constants.GetPlanes);
//ActPlaneInstance := Planes[GetPlayerPlane];
//end except (I dunno)
Result := -1;
end;
function GetPlaneSize(Dimension: String): Integer;
var
str: String;
//Planes, ActPlaneInstance: Object;
begin
//try blah blah
str := '';
case LowerCase(Dimension) of
'x': str := Constants.GetXSize;
'y': str := Constants.GetYSize;
'z': str := Constants.GetZSize;
else
Result := -1;
end;
//Planes := GetFieldObject(Constants.GetPlanes);
//ActPlaneInstance := Planes[GetPlayerPlane];
Result := GetFieldInt(str, ActPlaneInstance);
//except blah blah
Result := -1;
end;
Hopefully someone can finish this up. :) I know I really didn't do much, but I think it'll help someone.
Just wanted to reiterate, I can most definitely convert it all to Pascal to make it work just fine with SCAR, but I didn't have time to look up the type Object or any of that. This was just a basic skim over edit to try to convert as much as I could in as little time as I could. I can read up more about Java stuff (mainly Object and try..exception) and maybe ask TRiLeZ for more of the source so I can get a better understanding, and I can finish this within the next week, probably. But if anyone has the chance to do it before me, go for it. :)
And, again, all credit to TRiLeZ. I really didn't do anything. (I'd love to help, because I think it's quite interesting, and I will try to keep reflection up-to-date as much as I can. :))
So I was just looking up some stuff, and I think Variant would be a viable substitute for the Object class in Java. If anyone could do that, or if anyone knows what it should/could be, that'd be cool. :)
I'll work on this tomorrow if it's not finished.
(Lots of smiles.)