Continue decompiling

This commit is contained in:
Marijn van der Werf 2016-02-21 18:58:11 +01:00
parent 5fd4025b9b
commit 8f1c7ff064
1 changed files with 101 additions and 11 deletions

View File

@ -2665,22 +2665,25 @@ void sub_679074(rct_drawpixelinfo *dpi, int imageId, sint16 x, sint16 y)
} }
RCT2_GLOBAL(0x9E3D08, uint32) = image.offset; RCT2_GLOBAL(0x9E3D08, uint32) = image.offset;
RCT2_GLOBAL(0x9E3D0C, uint32) = image.width; RCT2_GLOBAL(0x9E3D0C, sint16) = image.width;
RCT2_GLOBAL(0x9E3D10, uint32) = image.x_offset; RCT2_GLOBAL(0x9E3D0C + 2, sint16) = image.height;
RCT2_GLOBAL(0x9E3D14, uint32) = image.flags; RCT2_GLOBAL(0x9E3D10, sint16) = image.x_offset;
RCT2_GLOBAL(0x9E3D10 + 2, sint16) = image.y_offset;
RCT2_GLOBAL(0x9E3D14, uint16) = image.flags;
RCT2_GLOBAL(0x9E3D14 + 2, uint16) = image.zoomed_offset;
if (image.flags & 4) { if (image.flags & 4) {
// push edi // push edi
y--; y--;
// ebp = edi; // ebp = edi;
// esi = image.offset; // esi = image.offset;
y += image.x_offset; y += image.y_offset;
uint16 width = image.width; uint16 height = image.height;
RCT2_GLOBAL(RCT2_ADDRESS_Y_START_POINT_GLOBAL, uint32) = 0; RCT2_GLOBAL(RCT2_ADDRESS_Y_START_POINT_GLOBAL, uint32) = 0;
if (width % 2) { if (height % 2) {
width--; height--;
if (width == 0) { if (height == 0) {
return; return;
} }
@ -2690,7 +2693,7 @@ void sub_679074(rct_drawpixelinfo *dpi, int imageId, sint16 x, sint16 y)
// TODO: (y = y/2?) // TODO: (y = y/2?)
y &= 0xFFFE; y &= 0xFFFE;
RCT2_GLOBAL(RCT2_ADDRESS_Y_END_POINT_GLOBAL, sint16) = width; RCT2_GLOBAL(RCT2_ADDRESS_Y_END_POINT_GLOBAL, sint16) = height;
y -= dpi->y; y -= dpi->y;
if (y < 0) { if (y < 0) {
@ -2715,9 +2718,9 @@ void sub_679074(rct_drawpixelinfo *dpi, int imageId, sint16 x, sint16 y)
} }
} }
sint16 ax = image.width; sint16 width = image.width;
RCT2_GLOBAL(RCT2_ADDRESS_X_START_POINT_GLOBAL, sint16) = 0; RCT2_GLOBAL(RCT2_ADDRESS_X_START_POINT_GLOBAL, sint16) = 0;
RCT2_GLOBAL(RCT2_ADDRESS_X_END_POINT_GLOBAL, sint16) = ax; RCT2_GLOBAL(RCT2_ADDRESS_X_END_POINT_GLOBAL, sint16) = width;
x += image.x_offset; x += image.x_offset;
x &= 0xFFFE; x &= 0xFFFE;
x -= dpi->x; x -= dpi->x;
@ -2744,6 +2747,93 @@ void sub_679074(rct_drawpixelinfo *dpi, int imageId, sint16 x, sint16 y)
RCT2_CALLPROC_X(0x00679788, 0, 0, 0, 0, image.offset, (int) dpi, (int) dpi); RCT2_CALLPROC_X(0x00679788, 0, 0, 0, 0, image.offset, (int) dpi, (int) dpi);
return; return;
} else {
// push edi
// ebp = edi;
//esi = image.offset;
uint32 esi = image.offset;
y += image.y_offset;
sint16 height = image.height;
if (height % 2) {
sint16 ebx = image.width;
height--;
esi += ebx;
}
if (height == 0) {
return;
}
y &= 0xFFFE;
RCT2_GLOBAL(RCT2_ADDRESS_Y_END_POINT_GLOBAL, sint16) = height;
y -= image.height;
if (y < 0) {
RCT2_GLOBAL(RCT2_ADDRESS_Y_END_POINT_GLOBAL, sint16) += y;
if (RCT2_GLOBAL(RCT2_ADDRESS_Y_END_POINT_GLOBAL, sint16) <= 0) {
return;
}
y = -y;
esi += (y * image.width) & 0xFFFF;
y = 0;
} else {
// Do nothing?
}
y += RCT2_GLOBAL(RCT2_ADDRESS_Y_END_POINT_GLOBAL, sint16);
y--;
if (y > 0) {
RCT2_GLOBAL(RCT2_ADDRESS_Y_END_POINT_GLOBAL, sint16) -= y;
if (RCT2_GLOBAL(RCT2_ADDRESS_Y_END_POINT_GLOBAL, sint16) <= 0) {
return;
}
}
sint16 ax = image.width;
RCT2_GLOBAL(RCT2_ADDRESS_X_END_POINT_GLOBAL, sint16) = ax;
RCT2_GLOBAL(0x009ABDAE, sint16) = 0;
x += image.x_offset;
x = floor2(x, 2);
x -= dpi->x;
if (x < 0) {
RCT2_GLOBAL(RCT2_ADDRESS_X_END_POINT_GLOBAL, sint16) += x;
if (RCT2_GLOBAL(RCT2_ADDRESS_X_END_POINT_GLOBAL, sint16) <= 0) {
return;
}
RCT2_GLOBAL(0x009ABDAE, sint16) -= x;
esi -= x;
x = 0;
}
x += RCT2_GLOBAL(RCT2_ADDRESS_X_END_POINT_GLOBAL, sint16);
x--;
if (x > 0) {
RCT2_GLOBAL(RCT2_ADDRESS_X_END_POINT_GLOBAL, sint16) -= x;
if (RCT2_GLOBAL(RCT2_ADDRESS_X_END_POINT_GLOBAL, sint16) <= 0) {
return;
}
RCT2_GLOBAL(0x009ABDAE, sint16) += x;
}
// Or is this the 'flags' part?
if (!(image.zoomed_offset & (1 << 1))) {
sint8 ah = (RCT2_GLOBAL(RCT2_ADDRESS_Y_END_POINT_GLOBAL, sint16) >> 8) & 0xFF;
int edx = RCT2_GLOBAL(0x009ABDAE, sint16);
int ebx = RCT2_GLOBAL(0x00EDF81C, uint32) = 0;
// ah and edx don't seem to be used by this function...
RCT2_CALLPROC_X(0x00679662, 0, ebx, 0, 0, esi, 0, 0);
return;
}
// loc_6795E4:
} }
break; break;