// Render.java public class Render { Render (int ai[], int i, int j) { pixels = ai; width = i; height = j; size = i * j; } public final int width () {return width;} public final int height () {return height;} public final int size () {return size;} public final void clear (int i) { for (int j = 0; j < size; j++) pixels[j] = i; } public final void line (float f, float f1, float f2, float f3, int i) { if (f > f2) { float f4 = f; f = f2; f2 = f4; f4 = f1; f1 = f3; f3 = f4; } int j = (int)f; int k = (int)f1; int l = (int)f2; int i1 = (int)f3; if (j == l) { if (k > i1) { int j1 = k; k = i1; i1 = j1; } int k1 = k * width + j; for (int i2 = k; i2 != i1; i2++) {pixels[k1] = i; k1 += width;} return; } if (k == i1) { int l1 = k * width + j; for (int j2 = j; j2 != l; j2++) {pixels[l1] = i; l1++;} return; } float f5 = f2 - f; float f6 = f3 - f1; if (f5 == 0.0F || f6 == 0.0F) return; if (Math.abs (f5) > Math.abs (f6)) { int k2 = (int)f; int i3 = (int)(f1 * 65535F); int k3 = (int)((f6 / f5) * 65535F); if (f6 > 0.0F) for (; k2 <= l; k2++) { int i4 = (i3 >> 16) * width + k2; pixels[i4] = i; i3 += k3; } else for (; k2 <= l; k2++) { int j4 = (i3 >> 16) * width + k2; pixels[j4] = i; i3 += k3; } } else { int l2 = (int)(f * 65535F); int j3 = (int)f1; int l3 = (int)((f5 / f6) * 65535F); if (f6 > 0.0F) for (; j3 <= i1; j3++) { int k4 = j3 * width + (l2 >> 16); pixels[k4] = i; l2 += l3; } else for (; j3 >= i1; j3--) { int l4 = j3 * width + (l2 >> 16); pixels[l4] = i; l2 -= l3; } } } public final void line_additive(float f, float f1, float f2, float f3, int i) { if (f > f2) { float f4 = f; f = f2; f2 = f4; f4 = f1; f1 = f3; f3 = f4; } int j = (int)f; int k = (int)f1; int l = (int)f2; int i1 = (int)f3; int j1 = i & 0xff00ff; int k1 = i & 0xff00; if (j == l) { if (k > i1) { int l1 = k; k = i1; i1 = l1; } int i2 = k * width + j; for (int k2 = k; k2 != i1; k2++) { int i3 = pixels[i2]; int i4 = i3 & 0xff00ff; int i5 = i3 & 0xff00; int i6 = j1 + i4; int k7 = k1 + i5; int i9 = i6 & 0x1000100; int k10 = k7 & 0x10000; int i12 = i9 >> 8; int k13 = k10 >> 8; int i15 = i9 - i12; int k16 = k10 - k13; pixels[i2] = i6 | k7 | i15 | k16; i2 += width; } return; } if (k == i1) { int j2 = k * width + j; for (int l2 = j; l2 != l; l2++) { int j3 = pixels[j2]; int j4 = j3 & 0xff00ff; int j5 = j3 & 0xff00; int j6 = j1 + j4; int l7 = k1 + j5; int j9 = j6 & 0x1000100; int l10 = l7 & 0x10000; int j12 = j9 >> 8; int l13 = l10 >> 8; int j15 = j9 - j12; int l16 = l10 - l13; pixels[j2] = j6 | l7 | j15 | l16; j2++; } return; } float f5 = f2 - f; float f6 = f3 - f1; if (f5 == 0.0F || f6 == 0.0F) return; if (Math.abs (f5) > Math.abs (f6)) { int k3 = (int)f; int k4 = (int)(f1 * 65535F); int k5 = (int)((f6 / f5) * 65535F); if (f6 > 0.0F) for (; k3 <= l; k3++) { int k6 = (k4 >> 16) * width + k3; int i8 = pixels[k6]; int k9 = i8 & 0xff00ff; int i11 = i8 & 0xff00; int k12 = j1 + k9; int i14 = k1 + i11; int k15 = k12 & 0x1000100; int i17 = i14 & 0x10000; int i18 = k15 >> 8; int i19 = i17 >> 8; int i20 = k15 - i18; int i21 = i17 - i19; pixels[k6] = k12 | i14 | i20 | i21; k4 += k5; } else for (; k3 <= l; k3++) { int l6 = (k4 >> 16) * width + k3; int j8 = pixels[l6]; int l9 = j8 & 0xff00ff; int j11 = j8 & 0xff00; int l12 = j1 + l9; int j14 = k1 + j11; int l15 = l12 & 0x1000100; int j17 = j14 & 0x10000; int j18 = l15 >> 8; int j19 = j17 >> 8; int j20 = l15 - j18; int j21 = j17 - j19; pixels[l6] = l12 | j14 | j20 | j21; k4 += k5; } } else { int l3 = (int)(f * 65535F); int l4 = (int)f1; int l5 = (int)((f5 / f6) * 65535F); if (f6 > 0.0F) for (; l4 <= i1; l4++) { int i7 = l4 * width + (l3 >> 16); int k8 = pixels[i7]; int i10 = k8 & 0xff00ff; int k11 = k8 & 0xff00; int i13 = j1 + i10; int k14 = k1 + k11; int i16 = i13 & 0x1000100; int k17 = k14 & 0x10000; int k18 = i16 >> 8; int k19 = k17 >> 8; int k20 = i16 - k18; int k21 = k17 - k19; pixels[i7] = i13 | k14 | k20 | k21; l3 += l5; } else for (; l4 >= i1; l4--) { int j7 = l4 * width + (l3 >> 16); int l8 = pixels[j7]; int j10 = l8 & 0xff00ff; int l11 = l8 & 0xff00; int j13 = j1 + j10; int l14 = k1 + l11; int j16 = j13 & 0x1000100; int l17 = l14 & 0x10000; int l18 = j16 >> 8; int l19 = l17 >> 8; int l20 = j16 - l18; int l21 = l17 - l19; pixels[j7] = j13 | l14 | l20 | l21; l3 -= l5; } } } public final void point (float f, float f1, int i) { int j = (int)f; int k = (int)f1; int l = k * width + j; pixels[l] = i; } public final void point_clipped (float f, float f1, int i) { int j = (int)f; int k = (int)f1; if (j < 0 || k < 0 || j >= width || k >= height) {return;} else { int l = k * width + j; pixels[l] = i; } } public final void sprite (float f, float f1, float f2, float f3, int ai[], int i, int j) { f -= i / 2; f1 -= j / 2; f2 = f + (float)i; f3 = f1 + (float)j; if (f < 0.0F || f1 < 0.0F || f2 > (float)width || f3 > (float)height) return; int k = 0; int l = 0; int i1 = (int)f; int j1 = (int)f1; int k1 = i; int l1 = j; if (i1 < 0) {k -= i1; k1 += i1; i1 = 0;} if (j1 < 0) {l -= j1; l1 += j1; j1 = 0;} int i2 = (int)f; int j2 = (int)f1; int k2 = width * l + k; int l2 = width * j1 + i1; int i3 = i - k1; int j3 = width - k1; for (int k3 = 0; k3 < l1; k3++) { for (int l3 = 0; l3 < k1; l3++) {pixels[l2] = ai[k2]; k2++; l2++;} k2 += i3; l2 += j3; } } public final void triangle (float f, float f1, float f2, float f3, float f4, float f5, int i) { float f6 = f; float f7 = f1; float f8 = f2; float f9 = f3; float f10 = f4; float f11 = f5; if (f7 > f9) { float f12 = f6; f6 = f8; f8 = f12; f12 = f7; f7 = f9; f9 = f12; } if (f9 > f11) { float f13 = f8; f8 = f10; f10 = f13; f13 = f9; f9 = f11; f11 = f13; } if (f7 > f9) { float f14 = f6; f6 = f8; f8 = f14; f14 = f7; f7 = f9; f9 = f14; } float f15 = f6 + ((f10 - f6) / (f11 - f7)) * (f9 - f7); float f16 = f9; if (f15 < f8) { float f17 = f15; f15 = f8; f8 = f17; f17 = f16; f16 = f9; f9 = f17; } int j = (int)(f7 + 1.0F); int k = (int)(f9 + 1.0F); int l = (int)(f11 + 1.0F); float f18 = j; float f19 = k; float f20 = l; int i1 = j; int j1 = k - i1; float f21 = f9 - f7; float f22 = (f8 - f6) / f21; float f23 = (f15 - f6) / f21; float f24 = f18 - f7; float f25 = f6 + f24 * f22; float f26 = f6 + f24 * f23; int k1 = i1 * width; f25++; f26++; for (int l1 = 0; l1 < j1; l1++) { int i2 = (int)f25; int k2 = (int)f26 - i2; int i3 = k1 + i2; for (int k3 = i3 + k2; i3 < k3; i3++) pixels[i3] = i; f25 += f22; f26 += f23; k1 += width; i1++; } i1 = k; j1 = l - i1; f21 = f11 - f9; f22 = (f10 - f8) / f21; f23 = (f10 - f15) / f21; f24 = f19 - f9; f25 = f8 + f24 * f22; f26 = f15 + f24 * f23; k1 = i1 * width; f25++; f26++; for (int j2 = 0; j2 < j1; j2++) { int l2 = (int)f25; int j3 = (int)f26 - l2; int l3 = k1 + l2; for (int i4 = l3 + j3; l3 < i4; l3++) pixels[l3] = i; f25 += f22; f26 += f23; k1 += width; i1++; } } public final void triangle_additive (float f, float f1, float f2, float f3, float f4, float f5, int i) { int j = i & 0xff00ff; int k = i & 0xff00; float f6 = f; float f7 = f1; float f8 = f2; float f9 = f3; float f10 = f4; float f11 = f5; if (f7 > f9) { float f12 = f6; f6 = f8; f8 = f12; f12 = f7; f7 = f9; f9 = f12; } if (f9 > f11) { float f13 = f8; f8 = f10; f10 = f13; f13 = f9; f9 = f11; f11 = f13; } if (f7 > f9) { float f14 = f6; f6 = f8; f8 = f14; f14 = f7; f7 = f9; f9 = f14; } float f15 = f6 + ((f10 - f6) / (f11 - f7)) * (f9 - f7); float f16 = f9; if (f15 < f8) { float f17 = f15; f15 = f8; f8 = f17; f17 = f16; f16 = f9; f9 = f17; } int l = (int)(f7 + 1.0F); int i1 = (int)(f9 + 1.0F); int j1 = (int)(f11 + 1.0F); float f18 = l; float f19 = i1; float f20 = j1; int k1 = l; int l1 = i1 - k1; float f21 = f9 - f7; float f22 = (f8 - f6) / f21; float f23 = (f15 - f6) / f21; float f24 = f18 - f7; float f25 = f6 + f24 * f22; float f26 = f6 + f24 * f23; int i2 = k1 * width; f25++; f26++; for (int j2 = 0; j2 < l1; j2++) { int k2 = (int)f25; int i3 = (int)f26 - k2; int k3 = i2 + k2; for (int i4 = k3 + i3; k3 < i4; k3++) { int k4 = pixels[k3]; int i5 = k4 & 0xff00ff; int k5 = k4 & 0xff00; int i6 = j + i5; int k6 = k + k5; int i7 = i6 & 0x1000100; int k7 = k6 & 0x10000; int i8 = i7 >> 8; int k8 = k7 >> 8; int i9 = i7 - i8; int k9 = k7 - k8; pixels[k3] = i6 | k6 | i9 | k9; } f25 += f22; f26 += f23; i2 += width; k1++; } k1 = i1; l1 = j1 - k1; f21 = f11 - f9; f22 = (f10 - f8) / f21; f23 = (f10 - f15) / f21; f24 = f19 - f9; f25 = f8 + f24 * f22; f26 = f15 + f24 * f23; i2 = k1 * width; f25++; f26++; for (int l2 = 0; l2 < l1; l2++) { int j3 = (int)f25; int l3 = (int)f26 - j3; int j4 = i2 + j3; for (int l4 = j4 + l3; j4 < l4; j4++) { int j5 = pixels[j4]; int l5 = j5 & 0xff00ff; int j6 = j5 & 0xff00; int l6 = j + l5; int j7 = k + j6; int l7 = l6 & 0x1000100; int j8 = j7 & 0x10000; int l8 = l7 >> 8; int j9 = j8 >> 8; int l9 = l7 - l8; int i10 = j8 - j9; pixels[j4] = l6 | j7 | l9 | i10; } f25 += f22; f26 += f23; i2 += width; k1++; } } int pixels[], width, height, size; }