When splitting strings into several lines to fit on the screen the
original engine could result in lines with one character beyond
the right edge of the screen, which in practice would be drawn
on the next line on its own, aligned to the left (and not centered).
This commits adds a check to avoid this situation. So although
it now behaves slightly differently than the original engine this
is for the better.
The changes in this commit should provide an identical text
placement to the original. In addition to using the original source
code as reference I have checked that is the case by comparing
with DosBox for the intro of the Spanish and English versions as
well as for parts of the game with the English version. I added
comments for the obscure parts (such as the original adding a
space at the end of the last line of text when splitting a string
into several lines, thus impacting how that last line is aligned).
This in particular fixes bug #7111: Incorrect position in texts, not as the
original. However this codes centers the text better than what we see in
DosBox, so the result is not identical.
This change is based on the code before the commit 7cf7f4b
"Rewrote the very confusing centerText() function into something that
makes more sense". The changes in that commit do not all make
sense to me so I reverted the line spacing (to add back 2 pixels between
text lines) and part of the logic to center text. The result looks a lot
closer to the original engine in DosBox, but not identical.
This bug is "DRASCULA-IT: Crash/graphic glitch at castle towers".
The crash was due to width and height values being passed to
copyBackground() being invalid due to out of bounds read from
the factor_red array. This adds debugging statements and fixes
the crash by clipping accesses to the maximum index of factor_red.
This doesn't however fix the observed GFX glitch, but stops it being
a segfault.
This tries to make our code a bit more compliant with our code formatting
conventions. For future use, this is the command I used:
git ls-files "*.cpp" "*.h" | xargs sed -i -e 's/[ \t]*$//'
The surface returned by OSystem::lockScreen() can have a pitch which
differs from w * bytesPerPixel, so modify the code to take this into
account. Fixes FMV problems on Dreamcast.
A memory leakage was traced down to a failure to call the engine destructor.
This was due to the engine directly calling OSystem quit() i.e. _system->quit(), rather than
just allowing engine::run() to return.
Have removed this code and implemented the changes required to allow graceful Quit/RTL to occur.
svn-id: r55583
Bug #2826608: "DRASCULA: Cursor GFX error" fixed by introducing
separate buffer for cursors. This also fixes the root cause of
the problem.
svn-id: r49713
- Merged copyRect and copyRectClip
- Added enums for all the possible character directions and removed duplicate directions
- Extended the talk sequence commands a bit
- Removed unnecessary buffer faceBuffer and the unneeded casts between byte * and char * that were used
svn-id: r34503
- Cleaned up updateDoor()
- Bugfixes to exitRoom() and gotoObject()
- Moved cursor-related functions to interface.cpp
- alapuertakeva -> roomExits
svn-id: r34493
- Removed the textSurface pointer, which was used in the Spanish version. Non-Spanish versions of the game hold the font data in the tableSurface buffer (which contains picture 96). The font data for Spanish versions is in picture 974. Now both versions load their font data from the tableSurface buffer
- hay_que_load -> loadedDifferentChapter
- Merged withoutVerb() and selectVerb()
This is a big change, it might lead to regressions!
svn-id: r34488