Opened 3 years ago
Closed 2 years ago
#12820 closed defect (fixed)
TWINE: boat window rendering is broken (renderPolygonsCopper)
Reported by: | mgerhardy | Owned by: | mgerhardy |
---|---|---|---|
Priority: | high | Component: | Engine: TwinE |
Version: | Keywords: | ||
Cc: | Game: | Little Big Adventure |
Description (last modified by )
This can be seen when using the trajectory idx 15
Use this debug console command to see the problem
set_holomap_trajectory 15
The windows of the ships aren't rendered correctly.
There are a few polygon render methods in the Renderer class that have a "FIXME: buggy" comment.
Attachments (2)
Change History (13)
by , 3 years ago
Attachment: | original_trajectory_holomap.jpeg added |
---|
by , 3 years ago
Attachment: | scummvm_trajectory_holomap.png added |
---|
comment:1 by , 3 years ago
Description: | modified (diff) |
---|
comment:2 by , 3 years ago
comment:3 by , 3 years ago
This is the ida disassembly result - but atm this is not rendering anything...
void Renderer::renderPolygonsBopper(int vtop, int32 vsize, uint8 color) const {
const int screenWidth = _engine->width();
const int screenHeight = _engine->height();
uint8 *v2 = (uint8 *)_engine->_frontVideoBuffer.getBasePtr(0, vtop);
v2 = screenLockupTable[(uint16)vtop] + frontVideoBuffer;
int8 *v3 = (int8 *)&_polyTab[(uint16)vtop];
int v5 = vsize; (uint16)vbottom - (uint16)vtop + 1;
int16 v14 = 0; bx@9
LOBYTE(v14) = color;
int j = 0; ecx@9
HIWORD(j) = 0;
do {
uint16 v16 = *(uint16 *)(v3 + screenHeight * 2);
int v7 = *(uint16 *)v3;
v3 += 2;
uint8 v34 = v16 < (uint16)v7;
if (!v34) {
LOWORD(j) = j + 1;
void *v18 = (void *)(v7 + v2);
HIBYTE(v14) = v14;
LOWORD(v7) = v14;
v7 <<= 16;
LOWORD(v7) = v14;
if ((intptr_t)v18 & 1) {
*(uint8 *)v18 = v14;
v18 = (char *)v18 + 1;
--j;
}
char v19 = j;
unsigned int v20 = (unsigned int)j / sizeof(int);
memset32(v18, v7, v20);
uint8 *v21 = ((uint8 *)v18 + sizeof(int) * v20);
for (j = v19 & 2; j; --j)
*(uint8 *)v21++ = v7;
LOBYTE(v14) = v14 + 1;
if (!(v14 & 0xF)) {
while (1) {
LOBYTE(v14) = v14 - 1;
if (!(v14 & 0xF))
break;
v2 += screenWidth;
--v5;
if (!v5)
return /*v7*/;
uint16 v22 = *(uint16 *)(v3 + screenHeight * 2);
v7 = *(uint16 *)v3;
v3 += 2;
v34 = v22 < (uint16)v7;
if (!v34) {
LOWORD(j) = j + 1;
void *v24 = (void *)(v7 + v2);
HIBYTE(v14) = v14;
LOWORD(v7) = v14;
v7 <<= 16;
LOWORD(v7) = v14;
if ((intptr_t)v24 & 1) {
*(uint8 *)v24 = v14;
v24 = (char *)v24 + 1;
--j;
}
char v25 = j;
unsigned int v26 = (unsigned int)j / sizeof(int);
memset32(v24, v7, v26);
uint8 *v27 = ((uint8 *)v24 + sizeof(int) * v26);
for (j = v25 & 2; j; --j)
*(uint8 *)v27++ = v7;
}
}
}
}
v2 += screenWidth;
--v5;
} while (v5);
}
comment:4 by , 3 years ago
hacked in 015fbb079759f3ccf149b1b77d9bd1eaf74844f5 - but still needs a proper fix
comment:5 by , 3 years ago
Summary: | TWINE: polygon rendering for the holomap trajectory vehicle rendering is broken → TWINE: polygon rendering for the holomap trajectory vehicle is broken |
---|
comment:6 by , 2 years ago
Priority: | normal → high |
---|
comment:7 by , 2 years ago
The same happens for the boat in scene 42 Proxim-City @ (Insel Proxi) and 24 Hafen von B�looga @ (Hauptinsel)
comment:8 by , 2 years ago
Summary: | TWINE: polygon rendering for the holomap trajectory vehicle is broken → TWINE: boat window rendering is broken |
---|
comment:9 by , 2 years ago
Summary: | TWINE: boat window rendering is broken → TWINE: boat window rendering is broken (renderPolygonsBopper) |
---|
comment:10 by , 2 years ago
Summary: | TWINE: boat window rendering is broken (renderPolygonsBopper) → TWINE: boat window rendering is broken (renderPolygonsCopper) |
---|
comment:11 by , 2 years ago
Owner: | set to |
---|---|
Resolution: | → fixed |
Status: | new → closed |
fixed in master 14177d71448dedf16089fe04a48bba239d82eb10
Renderer::renderPolygonsBopper is the cause of these flickerings