diff options
Diffstat (limited to 'engines/kyra/screen.cpp')
-rw-r--r-- | engines/kyra/screen.cpp | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/engines/kyra/screen.cpp b/engines/kyra/screen.cpp index c505152b11..1e5e0839be 100644 --- a/engines/kyra/screen.cpp +++ b/engines/kyra/screen.cpp @@ -1266,8 +1266,9 @@ void Screen::drawShape(uint8 pageNum, const uint8 *shapeData, int x, int y, int &Screen::drawShapePlotType11_15, // used by Kyra 1 (invisibility) 0, 0, 0, 0, &Screen::drawShapePlotType20, // used by LoL (heal spell effect) - 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, + &Screen::drawShapePlotType21, // used by LoL (white tower spirits) + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, &Screen::drawShapePlotType33, // used by LoL (blood spots on the floor) 0, 0, 0, &Screen::drawShapePlotType37, // used by LoL (monsters) @@ -1843,6 +1844,19 @@ void Screen::drawShapePlotType20(uint8 *dst, uint8 cmd) { *dst = cmd; } +void Screen::drawShapePlotType21(uint8 *dst, uint8 cmd) { + cmd = _dsTable2[cmd]; + uint8 tOffs = _dsTable3[cmd]; + if (!(tOffs & 0x80)) + cmd = _dsTable4[tOffs << 8 | *dst]; + + for (int i = 0; i < _dsTableLoopCount; ++i) + cmd = _dsTable[cmd]; + + if (cmd) + *dst = cmd; +} + void Screen::drawShapePlotType33(uint8 *dst, uint8 cmd) { if (cmd == 255) { *dst = _dsTable5[*dst]; |