mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-04 01:46:42 +00:00
CGE: replace some 'tricky replicate lines' memcpy by two, in order to avoid overlapping
This commit is contained in:
parent
080d7cf7f0
commit
0b27de942b
@ -108,7 +108,6 @@ public:
|
||||
~Mouse();
|
||||
void on();
|
||||
void off();
|
||||
void tick();
|
||||
void newMouse(Common::Event &event);
|
||||
private:
|
||||
CGEEngine *_vm;
|
||||
|
@ -248,13 +248,22 @@ void Talk::putLine(int line, const char *text) {
|
||||
|
||||
// clear whole rectangle
|
||||
p = v; // assume blanked line above text
|
||||
memcpy(p, p - lsiz, rsiz);
|
||||
|
||||
byte *tmpBuf = new byte[rsiz];
|
||||
|
||||
memcpy(tmpBuf, p - lsiz, rsiz);
|
||||
memcpy(p, tmpBuf, rsiz);
|
||||
p += psiz; // tricky replicate lines for plane 0
|
||||
memcpy(p, p - lsiz, rsiz);
|
||||
memcpy(tmpBuf, p - lsiz, rsiz);
|
||||
memcpy(p, tmpBuf, rsiz);
|
||||
p += psiz; // same for plane 1
|
||||
memcpy(p, p - lsiz, rsiz);
|
||||
memcpy(tmpBuf, p - lsiz, rsiz);
|
||||
memcpy(p, tmpBuf, rsiz);
|
||||
p += psiz; // same for plane 2
|
||||
memcpy(p, p - lsiz, rsiz); // same for plane 3
|
||||
memcpy(tmpBuf, p - lsiz, rsiz);
|
||||
memcpy(p, tmpBuf, rsiz);
|
||||
|
||||
delete[] tmpBuf;
|
||||
|
||||
// paint text line
|
||||
if (text) {
|
||||
@ -302,10 +311,18 @@ void InfoLine::update(const char *tx) {
|
||||
uint16 size = 4 * psiz; // whole map size
|
||||
|
||||
// clear whole rectangle
|
||||
byte *tmpBuf = new byte[size];
|
||||
memset(v + 2, TEXT_BG, dsiz); // data bytes
|
||||
memcpy(v + lsiz, v, psiz - lsiz); // tricky replicate lines
|
||||
|
||||
memcpy(tmpBuf, v, psiz - lsiz);
|
||||
memcpy(v + lsiz, tmpBuf, psiz - lsiz);
|
||||
|
||||
*(uint16 *)(v + psiz - 2) = EOI; // plane trailer uint16
|
||||
memcpy(v + psiz, v, 3 * psiz); // tricky replicate planes
|
||||
|
||||
memcpy(tmpBuf, v, 3 * psiz);
|
||||
memcpy(v + psiz, tmpBuf, 3 * psiz);
|
||||
|
||||
delete[] tmpBuf;
|
||||
|
||||
// paint text line
|
||||
if (tx) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user