changed resolution values from static to dynamic, I hope I don't break something

svn-id: r4885
This commit is contained in:
Paweł Kołodziejski 2002-08-31 16:29:17 +00:00
parent 8d3a3fc1d6
commit 6e751af6c0
5 changed files with 90 additions and 86 deletions

View file

@ -160,7 +160,7 @@ byte CostumeRenderer::mainRoutine(Actor *a, int slot, int frame)
_right = _left = _xpos; _right = _left = _xpos;
_scaleIndexX = unk19; _scaleIndexX = unk19;
for (i = 0; i < _width; i++) { for (i = 0; i < _width; i++) {
if (_left > 319) { if (_left > (_realWidth - 1)) {
s++; s++;
unk19 = _scaleIndexX; unk19 = _scaleIndexX;
} }
@ -217,10 +217,10 @@ byte CostumeRenderer::mainRoutine(Actor *a, int slot, int frame)
if (_top >= (int)_outheight || _bottom <= 0) if (_top >= (int)_outheight || _bottom <= 0)
return 0; return 0;
_ypitch = _height * 320; _ypitch = _height * _realWidth;
_docontinue = 0; _docontinue = 0;
b = 1; b = 1;
if (_left > 319 || _right <= 0) if (_left > (_realWidth - 1) || _right <= 0)
return 1; return 1;
if (_mirror) { if (_mirror) {
_ypitch--; _ypitch--;
@ -235,7 +235,7 @@ byte CostumeRenderer::mainRoutine(Actor *a, int slot, int frame)
_docontinue = 1; _docontinue = 1;
} }
} else { } else {
s = _right - 320; s = _right - _realWidth;
if (s <= 0) { if (s <= 0) {
b = 2; b = 2;
} else { } else {
@ -245,12 +245,12 @@ byte CostumeRenderer::mainRoutine(Actor *a, int slot, int frame)
} else { } else {
_ypitch++; _ypitch++;
if (scaling == 0) if (scaling == 0)
s = _right - 320; s = _right - _realWidth;
if (s > 0) { if (s > 0) {
if (!newAmiCost) { if (!newAmiCost) {
_width2 -= s; _width2 -= s;
ignorePakCols(s); ignorePakCols(s);
_xpos = 319; _xpos = _realWidth - 1;
_docontinue = 1; _docontinue = 1;
} }
} else { } else {
@ -646,7 +646,7 @@ void CostumeRenderer::proc2()
_scaleIndexX = t + _scaleIndexXStep; _scaleIndexX = t + _scaleIndexXStep;
if (cost_scaleTable[t] < _scaleX) { if (cost_scaleTable[t] < _scaleX) {
_xpos += _scaleIndexXStep; _xpos += _scaleIndexXStep;
if (_xpos >= 320) if (_xpos >= _realWidth)
return; return;
maskbit = revBitMask[_xpos & 7]; maskbit = revBitMask[_xpos & 7];
_backbuff_ptr += _scaleIndexXStep; _backbuff_ptr += _scaleIndexXStep;
@ -694,7 +694,7 @@ void CostumeRenderer::proc1()
pcolor = _shadow_table[*dst]; pcolor = _shadow_table[*dst];
*dst = pcolor; *dst = pcolor;
} }
dst += 320; dst += _realWidth;
y++; y++;
} }
if (!--height) { if (!--height) {
@ -707,7 +707,7 @@ void CostumeRenderer::proc1()
_scaleIndexX = t + _scaleIndexXStep; _scaleIndexX = t + _scaleIndexXStep;
if (cost_scaleTable[t] < _scaleX) { if (cost_scaleTable[t] < _scaleX) {
_xpos += _scaleIndexXStep; _xpos += _scaleIndexXStep;
if (_xpos >= 320) if (_xpos >= _realWidth)
return; return;
_backbuff_ptr += _scaleIndexXStep; _backbuff_ptr += _scaleIndexXStep;
} }
@ -745,7 +745,7 @@ void CostumeRenderer::proc6_ami()
len = *src++; len = *src++;
do { do {
if (color && x >= 0 && x < 320) { if (color && x >= 0 && x < _realWidth) {
pcolor = _palette[color]; pcolor = _palette[color];
/* if (pcolor == 13) { /* if (pcolor == 13) {
pcolor = _shadow_table[*dst]; pcolor = _shadow_table[*dst];
@ -759,7 +759,7 @@ void CostumeRenderer::proc6_ami()
if (!--height) if (!--height)
return; return;
width = _width; width = _width;
dst += 320-step*_width; dst += _realWidth - step * _width;
x = _xpos; x = _xpos;
y++; y++;
if (y >= scrheight) if (y >= scrheight)
@ -795,7 +795,7 @@ void CostumeRenderer::proc5_ami()
len = *src++; len = *src++;
do { do {
if (color && x >=0 && x < 320 && !(*mask & maskbit)) { if (color && x >=0 && x < _realWidth && !(*mask & maskbit)) {
pcolor = _palette[color]; pcolor = _palette[color];
/* if (pcolor == 13) /* if (pcolor == 13)
pcolor = _shadow_table[*dst];*/ pcolor = _shadow_table[*dst];*/
@ -824,7 +824,7 @@ void CostumeRenderer::proc5_ami()
width = _width; width = _width;
x = _xpos; x = _xpos;
y++; y++;
dst += 320-step*_width; dst += _realWidth - step * _width;
_mask_ptr+=40; _mask_ptr+=40;
mask = _mask_ptr; mask = _mask_ptr;
maskbit = revBitMask[_xpos & 7]; maskbit = revBitMask[_xpos & 7];
@ -861,7 +861,7 @@ void CostumeRenderer::proc4_ami()
len = *src++; len = *src++;
do { do {
if (color && x >= 0 && x < 320 && !((*mask | mask[_imgbufoffs]) & maskbit)) { if (color && x >= 0 && x < _realWidth && !((*mask | mask[_imgbufoffs]) & maskbit)) {
pcolor = _palette[color]; pcolor = _palette[color];
/* if (pcolor == 13) /* if (pcolor == 13)
pcolor = _shadow_table[*dst];*/ pcolor = _shadow_table[*dst];*/
@ -888,7 +888,7 @@ void CostumeRenderer::proc4_ami()
width = _width; width = _width;
y++; y++;
x = _xpos; x = _xpos;
dst += 320-step*_width; dst += _realWidth - step * _width;
_mask_ptr+= 40; _mask_ptr+= 40;
mask = _mask_ptr; mask = _mask_ptr;
maskbit = revBitMask[_xpos & 7]; maskbit = revBitMask[_xpos & 7];
@ -949,7 +949,7 @@ void CostumeRenderer::proc3_ami()
return; return;
if (_xpos != oldXpos) { if (_xpos != oldXpos) {
dst += 320-(_xpos-oldXpos); dst += _realWidth - (_xpos - oldXpos);
_mask_ptr += 40; _mask_ptr += 40;
mask = _mask_ptr; mask = _mask_ptr;
y++; y++;
@ -990,7 +990,7 @@ void CostumeRenderer::proc2_ami()
len = *src++; len = *src++;
do { do {
if (cost_scaleTable[_scaleIndexY] < _scaleY) { if (cost_scaleTable[_scaleIndexY] < _scaleY) {
if (color && _xpos >= 0 && _xpos < 320 && !(*mask & maskbit)) { if (color && _xpos >= 0 && _xpos < _realWidth && !(*mask & maskbit)) {
pcolor = _palette[color]; pcolor = _palette[color];
/* if (pcolor == 13) /* if (pcolor == 13)
pcolor = _shadow_table[*dst];*/ pcolor = _shadow_table[*dst];*/
@ -1014,7 +1014,7 @@ void CostumeRenderer::proc2_ami()
return; return;
if (_xpos != oldXpos) { if (_xpos != oldXpos) {
dst += 320-(_xpos-oldXpos); dst += _realWidth - (_xpos - oldXpos);
_mask_ptr += 40; _mask_ptr += 40;
mask = _mask_ptr; mask = _mask_ptr;
y++; y++;
@ -1059,7 +1059,7 @@ void CostumeRenderer::proc1_ami()
do { do {
if (cost_scaleTable[_scaleIndexY] < _scaleY) { if (cost_scaleTable[_scaleIndexY] < _scaleY) {
if (color && _xpos >= 0 && _xpos < 320) { if (color && _xpos >= 0 && _xpos < _realWidth) {
pcolor = _palette[color]; pcolor = _palette[color];
/* if (pcolor == 13) /* if (pcolor == 13)
pcolor = _shadow_table[*dst];*/ pcolor = _shadow_table[*dst];*/
@ -1081,7 +1081,7 @@ void CostumeRenderer::proc1_ami()
return; return;
if (_xpos != oldXpos) { if (_xpos != oldXpos) {
dst += 320-(_xpos-oldXpos); dst += _realWidth - (_xpos - oldXpos);
y++; y++;
} }
width = _width; width = _width;
@ -1166,7 +1166,7 @@ void CostumeRenderer::proc_special(Actor *a, byte mask2)
*dst = pcolor; *dst = pcolor;
} }
} }
dst += 320; dst += _realWidth;
mask += 40; mask += 40;
y++; y++;
} }
@ -1180,7 +1180,7 @@ void CostumeRenderer::proc_special(Actor *a, byte mask2)
_scaleIndexX = t + _scaleIndexXStep; _scaleIndexX = t + _scaleIndexXStep;
if (cost_scaleTable[t] < _scaleX) { if (cost_scaleTable[t] < _scaleX) {
_xpos += _scaleIndexXStep; _xpos += _scaleIndexXStep;
if (_xpos >= 320) if (_xpos >= _realWidth)
return; return;
maskbit = revBitMask[_xpos & 7]; maskbit = revBitMask[_xpos & 7];
_backbuff_ptr += _scaleIndexXStep; _backbuff_ptr += _scaleIndexXStep;

View file

@ -85,7 +85,7 @@ void Scumm::initVirtScreen(int slot, int number, int top, int width, int height,
vs->number = slot; vs->number = slot;
vs->unk1 = 0; vs->unk1 = 0;
vs->width = 320; vs->width = _realWidth;
vs->topline = top; vs->topline = top;
vs->height = height; vs->height = height;
vs->alloctwobuffers = twobufs; vs->alloctwobuffers = twobufs;
@ -96,7 +96,7 @@ void Scumm::initVirtScreen(int slot, int number, int top, int width, int height,
vs->backBuf = NULL; vs->backBuf = NULL;
if (vs->scrollable) if (vs->scrollable)
size += 320 * 4; size += _realWidth * 4;
createResource(rtBuffer, slot + 1, size); createResource(rtBuffer, slot + 1, size);
vs->screenPtr = getResourceAddress(rtBuffer, slot + 1); vs->screenPtr = getResourceAddress(rtBuffer, slot + 1);
@ -148,7 +148,7 @@ void Scumm::drawDirtyScreenParts()
vs = &virtscr[0]; vs = &virtscr[0];
src = vs->screenPtr + _screenStartStrip * 8 + camera._cur.y - 100; src = vs->screenPtr + _screenStartStrip * 8 + camera._cur.y - 100;
_system->copy_rect(src, 320, 0, vs->topline, 320, vs->height); _system->copy_rect(src, _realWidth, 0, vs->topline, _realWidth, vs->height);
for (i = 0; i < NUM_STRIPS; i++) { for (i = 0; i < NUM_STRIPS; i++) {
vs->tdirty[i] = (byte)vs->height; vs->tdirty[i] = (byte)vs->height;
@ -225,15 +225,15 @@ void Gdi::drawStripToScreen(VirtScreen *vs, int x, int w, int t, int b)
b = vs->height; b = vs->height;
height = b - t; height = b - t;
if (height > 200) if (height > _realHeight)
height = 200; height = _realHeight;
scrollY = _vm->camera._cur.y - 100; scrollY = _vm->camera._cur.y - (_realHeight / 2);
if (scrollY == -100) if (scrollY == -(_realHeight / 2))
scrollY = 0; scrollY = 0;
ptr = vs->screenPtr + (t * NUM_STRIPS + x) * 8 + _readOffs + scrollY * 320; ptr = vs->screenPtr + (t * NUM_STRIPS + x) * 8 + _readOffs + scrollY * _realWidth;
_vm->_system->copy_rect(ptr, 320, x * 8, vs->topline + t, w, height); _vm->_system->copy_rect(ptr, _realWidth, x * 8, vs->topline + t, w, height);
} }
void blit(byte *dst, byte *src, int w, int h) void blit(byte *dst, byte *src, int w, int h)
@ -269,7 +269,7 @@ void Scumm::setCameraAt(int pos_x, int pos_y)
camera._dest = camera._cur; camera._dest = camera._cur;
assert(camera._cur.x >= 160 && camera._cur.y >= 100); assert(camera._cur.x >= (_realWidth / 2) && camera._cur.y >= (_realHeight / 2));
if ((camera._cur.x != old.x || camera._cur.y != old.y) if ((camera._cur.x != old.x || camera._cur.y != old.y)
&& _vars[VAR_SCROLL_SCRIPT]) { && _vars[VAR_SCROLL_SCRIPT]) {
@ -280,7 +280,7 @@ void Scumm::setCameraAt(int pos_x, int pos_y)
} else { } else {
int t; int t;
if (camera._mode != CM_FOLLOW_ACTOR || abs(pos_x - camera._cur.x) > 160) { if (camera._mode != CM_FOLLOW_ACTOR || abs(pos_x - camera._cur.x) > (_realWidth / 2)) {
camera._cur.x = pos_x; camera._cur.x = pos_x;
} }
camera._dest.x = pos_x; camera._dest.x = pos_x;
@ -318,7 +318,7 @@ void Scumm::setCameraFollows(Actor *a)
ax = abs(a->x - camera._cur.x); ax = abs(a->x - camera._cur.x);
ay = abs(a->y - camera._cur.y); ay = abs(a->y - camera._cur.y);
if (ax > _vars[VAR_CAMERA_THRESHOLD_X] || ay > _vars[VAR_CAMERA_THRESHOLD_Y] || ax > 160 || ay > 100) { if (ax > _vars[VAR_CAMERA_THRESHOLD_X] || ay > _vars[VAR_CAMERA_THRESHOLD_Y] || ax > (_realWidth / 2) || ay > (_realHeight / 2)) {
setCameraAt(a->x, a->y); setCameraAt(a->x, a->y);
} }
@ -357,7 +357,7 @@ void Scumm::initBGBuffers(int height)
byte *room; byte *room;
if (_features & GF_AFTER_V7) { if (_features & GF_AFTER_V7) {
initVirtScreen(0, 0, virtscr[0].topline, 200, height, 1, 1); initVirtScreen(0, 0, virtscr[0].topline, _realHeight, height, 1, 1);
} }
room = getResourceAddress(rtRoom, _roomResource); room = getResourceAddress(rtRoom, _roomResource);
@ -598,7 +598,7 @@ void Scumm::drawFlashlight()
if (flashBuffer) { if (flashBuffer) {
offset = 320 - flashW*8; offset = _realWidth - flashW*8;
i = flashH; i = flashH;
do { do {
j = flashW*2; j = flashW*2;
@ -641,7 +641,7 @@ void Scumm::drawFlashlight()
} }
byte *bgbak; byte *bgbak;
offset = (flashY - topline) * 320 + virtscr[0].xstart + flashX*8; offset = (flashY - topline) * _realWidth + virtscr[0].xstart + flashX * 8;
flashBuffer = virtscr[0].screenPtr + offset; flashBuffer = virtscr[0].screenPtr + offset;
bgbak = getResourceAddress(rtBuffer, 5) + offset; bgbak = getResourceAddress(rtBuffer, 5) + offset;
@ -652,9 +652,9 @@ void Scumm::drawFlashlight()
int corner_data[] = { 8, 6, 4, 3, 2, 2, 1, 1 }; int corner_data[] = { 8, 6, 4, 3, 2, 2, 1, 1 };
int minrow = 0; int minrow = 0;
int maxcol = flashW * 8 - 1; int maxcol = flashW * 8 - 1;
int maxrow = (flashH - 1) * 320; int maxrow = (flashH - 1) * _realWidth;
for (i = 0; i < 8; i++, minrow += 320, maxrow -= 320) { for (i = 0; i < 8; i++, minrow += _realWidth, maxrow -= _realWidth) {
int d = corner_data[i]; int d = corner_data[i];
for (j = 0; j < d; j++) { for (j = 0; j < d; j++) {
@ -872,7 +872,7 @@ void Gdi::drawBitmap(byte *ptr, VirtScreen *vs, int x, int y, int h,
twobufs = vs->alloctwobuffers; twobufs = vs->alloctwobuffers;
_vertStripNextInc = h * 320 - 1; _vertStripNextInc = h * _realWidth - 1;
_numLinesToProcess = h; _numLinesToProcess = h;
@ -1138,8 +1138,8 @@ void Gdi::draw8ColWithMasking()
((uint32 *)dst)[0] = ((uint32 *)src)[0]; ((uint32 *)dst)[0] = ((uint32 *)src)[0];
((uint32 *)dst)[1] = ((uint32 *)src)[1]; ((uint32 *)dst)[1] = ((uint32 *)src)[1];
} }
src += 320; src += _realWidth;
dst += 320; dst += _realWidth;
mask += NUM_STRIPS; mask += NUM_STRIPS;
} while (--height); } while (--height);
} }
@ -1187,7 +1187,7 @@ void Gdi::clear8Col()
do { do {
((uint32 *)dst)[0] = 0; ((uint32 *)dst)[0] = 0;
((uint32 *)dst)[1] = 0; ((uint32 *)dst)[1] = 0;
dst += 320; dst += _realWidth;
} while (--height); } while (--height);
} }
@ -1508,7 +1508,7 @@ void Gdi::unkDecode6()
_tempNumLines = _numLinesToProcess; _tempNumLines = _numLinesToProcess;
do { do {
FILL_BITS *dst = color + _palette_mod; FILL_BITS *dst = color + _palette_mod;
dst += 320; dst += _realWidth;
if (!READ_BIT) { if (!READ_BIT) {
} else if (!READ_BIT) { } else if (!READ_BIT) {
FILL_BITS color = bits & _decomp_mask; FILL_BITS color = bits & _decomp_mask;
@ -1532,7 +1532,7 @@ void Gdi::unkDecode6()
bits = ((buffer & mask) != 0); bits = ((buffer & mask) != 0);
#define NEXT_ROW \ #define NEXT_ROW \
dst += 320; \ dst += _realWidth; \
if (--h == 0) { \ if (--h == 0) { \
if (!--_currentX) \ if (!--_currentX) \
return; \ return; \
@ -1565,7 +1565,7 @@ void Gdi::unkDecode7()
((uint32 *)dst)[0] = ((uint32 *)src)[0]; ((uint32 *)dst)[0] = ((uint32 *)src)[0];
((uint32 *)dst)[1] = ((uint32 *)src)[1]; ((uint32 *)dst)[1] = ((uint32 *)src)[1];
#endif #endif
dst += 320; dst += _realWidth;
src += 8; src += 8;
} while (--height); } while (--height);
} }
@ -1756,16 +1756,16 @@ void Scumm::restoreBG(int left, int top, int right, int bottom)
left = 0; left = 0;
if (right < 0) if (right < 0)
right = 0; right = 0;
if (left > 320) if (left > _realWidth)
return; return;
if (right > 320) if (right > _realWidth)
right = 320; right = _realWidth;
if (bottom >= height) if (bottom >= height)
bottom = height; bottom = height;
updateDirtyRect(vs->number, left, right, top - topline, bottom - topline, 0x40000000); updateDirtyRect(vs->number, left, right, top - topline, bottom - topline, 0x40000000);
height = (top - topline) * 320 + vs->xstart + left; height = (top - topline) * _realWidth + vs->xstart + left;
backbuff = vs->screenPtr + height; backbuff = vs->screenPtr + height;
bgbak = getResourceAddress(rtBuffer, vs->number + 5) + height; bgbak = getResourceAddress(rtBuffer, vs->number + 5) + height;
@ -1820,8 +1820,8 @@ void Scumm::updateDirtyRect(int virt, int left, int right, int top, int bottom,
lp = (left >> 3) + _screenStartStrip; lp = (left >> 3) + _screenStartStrip;
if (lp < 0) if (lp < 0)
lp = 0; lp = 0;
if (rp >= 200) if (rp >= _realHeight)
rp = 200; rp = _realHeight;
if (lp <= rp) { if (lp <= rp) {
num = rp - lp + 1; num = rp - lp + 1;
sp = &gfxUsageBits[lp]; sp = &gfxUsageBits[lp];
@ -2161,7 +2161,7 @@ void Scumm::moveCamera()
camera._dest.y = a->y; camera._dest.y = a->y;
} }
assert(camera._cur.x >= 160 && camera._cur.y >= 100); assert(camera._cur.x >= (_realWidth / 2) && camera._cur.y >= (_realHeight / 2));
clampCameraPos(&camera._dest); clampCameraPos(&camera._dest);
@ -2311,14 +2311,14 @@ void Scumm::cameraMoved()
_screenEndStrip = _screenStartStrip + NUM_STRIPS - 1; _screenEndStrip = _screenStartStrip + NUM_STRIPS - 1;
virtscr[0].xstart = _screenStartStrip << 3; virtscr[0].xstart = _screenStartStrip << 3;
_screenLeft = camera._cur.x - 160; _screenLeft = camera._cur.x - (_realWidth / 2);
_screenTop = camera._cur.y - 100; _screenTop = camera._cur.y - (_realHeight / 2);
} else { } else {
if (camera._cur.x < 160) { if (camera._cur.x < (_realWidth / 2)) {
camera._cur.x = 160; camera._cur.x = (_realWidth / 2);
} else if (camera._cur.x + 160 >= _scrWidth) { } else if (camera._cur.x + (_realWidth / 2) >= _scrWidth) {
camera._cur.x = _scrWidth - 160; camera._cur.x = _scrWidth - (_realWidth / 2);
} }
_screenStartStrip = (camera._cur.x >> 3) - 20; _screenStartStrip = (camera._cur.x >> 3) - 20;
@ -2832,7 +2832,7 @@ void Scumm::grabCursor(byte *ptr, int width, int height)
for (; height; height--) { for (; height; height--) {
memcpy(dst, ptr, width); memcpy(dst, ptr, width);
dst += width; dst += width;
ptr += 320; ptr += _realWidth;
} }
updateCursor(); updateCursor();

View file

@ -136,7 +136,7 @@ bool Scumm::loadState(int slot, bool compat)
gdi._mask_left = -1; gdi._mask_left = -1;
initScreens(0, 0, 320, 200); initScreens(0, 0, _realWidth, _realHeight);
// Force a fade to black // Force a fade to black
int old_screenEffectFlag = _screenEffectFlag; int old_screenEffectFlag = _screenEffectFlag;
@ -144,7 +144,7 @@ bool Scumm::loadState(int slot, bool compat)
fadeOut(129); fadeOut(129);
_screenEffectFlag = old_screenEffectFlag; _screenEffectFlag = old_screenEffectFlag;
initScreens(0, sb, 320, sh); initScreens(0, sb, _realWidth, sh);
_completeScreenRedraw = true; _completeScreenRedraw = true;
setDirtyColors(0, 255); setDirtyColors(0, 255);

View file

@ -91,6 +91,10 @@ Scumm::Scumm (GameDetector *detector, OSystem *syst)
if (_gameId == GID_ZAK256) { // FmTowns is 320x240 if (_gameId == GID_ZAK256) { // FmTowns is 320x240
_realWidth = 320; _realWidth = 320;
_realHeight = 240; _realHeight = 240;
} else {
if (_gameId == GID_CMI) {
_realWidth = 640;
_realHeight = 480;
} else { } else {
_realWidth = 320; _realWidth = 320;
_realHeight = 200; _realHeight = 200;
@ -176,7 +180,7 @@ void Scumm::scummInit()
if (!(_features & GF_SMALL_NAMES)) if (!(_features & GF_SMALL_NAMES))
loadCharset(1); loadCharset(1);
initScreens(0, 16, 320, 144); initScreens(0, 16, _realWidth, 144);
setShake(0); setShake(0);
setupCursor(); setupCursor();
@ -201,7 +205,7 @@ void Scumm::scummInit()
for (i = 0; i < _maxVerbs; i++) { for (i = 0; i < _maxVerbs; i++) {
_verbs[i].verbid = 0; _verbs[i].verbid = 0;
_verbs[i].right = 319; _verbs[i].right = _realWidth - 1;
_verbs[i].oldleft = -1; _verbs[i].oldleft = -1;
_verbs[i].type = 0; _verbs[i].type = 0;
_verbs[i].color = 2; _verbs[i].color = 2;
@ -272,7 +276,7 @@ void Scumm::scummInit()
string[i].t_xpos = 2; string[i].t_xpos = 2;
string[i].t_ypos = 5; string[i].t_ypos = 5;
} }
string[i].t_right = 319; string[i].t_right = _realWidth - 1;
string[i].t_color = 0xF; string[i].t_color = 0xF;
string[i].t_center = 0; string[i].t_center = 0;
string[i].t_charset = 0; string[i].t_charset = 0;
@ -566,8 +570,8 @@ void Scumm::startScene(int room, Actor * a, int objectNr)
if (!(_features & GF_AFTER_V7)) { if (!(_features & GF_AFTER_V7)) {
camera._mode = CM_NORMAL; camera._mode = CM_NORMAL;
camera._cur.x = camera._dest.x = 160; camera._cur.x = camera._dest.x = _realWidth / 2;
camera._cur.y = camera._dest.y = 100; camera._cur.y = camera._dest.y = _realHeight / 2;
} }
if (_features & GF_AFTER_V6) { if (_features & GF_AFTER_V6) {
@ -576,14 +580,14 @@ void Scumm::startScene(int room, Actor * a, int objectNr)
} }
if (_features & GF_AFTER_V7) { if (_features & GF_AFTER_V7) {
_vars[VAR_CAMERA_MIN_X] = 160; _vars[VAR_CAMERA_MIN_X] = _realWidth / 2;
_vars[VAR_CAMERA_MAX_X] = _scrWidth - 160; _vars[VAR_CAMERA_MAX_X] = _scrWidth - (_realWidth / 2);
_vars[VAR_CAMERA_MIN_Y] = 100; _vars[VAR_CAMERA_MIN_Y] = _realHeight / 2;
_vars[VAR_CAMERA_MAX_Y] = _scrHeight - 100; _vars[VAR_CAMERA_MAX_Y] = _scrHeight - (_realHeight / 2);
setCameraAt(160, 100); setCameraAt(_realWidth / 2, _realHeight / 2);
} else { } else {
_vars[VAR_CAMERA_MAX_X] = _scrWidth - 160; _vars[VAR_CAMERA_MAX_X] = _scrWidth - (_realWidth / 2);
_vars[VAR_CAMERA_MIN_X] = 160; _vars[VAR_CAMERA_MIN_X] = _realWidth / 2;
} }
if (_roomResource == 0) if (_roomResource == 0)
@ -1465,10 +1469,10 @@ void Scumm::launch()
_minHeapThreshold = 400000; _minHeapThreshold = 400000;
// Create a primary virtual screen // Create a primary virtual screen
_videoBuffer = (byte *)calloc(328*200, 1); _videoBuffer = (byte *)calloc((_realWidth + 8) * _realHeight, 1);
allocResTypeData(rtBuffer, MKID('NONE'), 10, "buffer", 0); allocResTypeData(rtBuffer, MKID('NONE'), 10, "buffer", 0);
initVirtScreen(0, 0, 0, 320, 200, false, false); initVirtScreen(0, 0, 0, _realWidth, _realHeight, false, false);
if (_features & GF_AFTER_V7) if (_features & GF_AFTER_V7)
setupScummVarsNew(); setupScummVarsNew();

View file

@ -240,12 +240,12 @@ void Scumm::CHARSET_1()
if (string[0].ypos < 1) if (string[0].ypos < 1)
string[0].ypos = 1; string[0].ypos = 1;
if (string[0].ypos < camera._cur.y - 100) if (string[0].ypos < camera._cur.y - (_realHeight / 2))
string[0].ypos = camera._cur.y - 100; string[0].ypos = camera._cur.y - (_realHeight / 2);
s = a->scalex * a->new_2 / 0xFF; s = a->scalex * a->new_2 / 0xFF;
string[0].xpos = ((a->new_2 - s) >> 1) + s + a->x - camera._cur.x + 160; string[0].xpos = ((a->new_2 - s) >> 1) + s + a->x - camera._cur.x + (_realWidth / 2);
if (string[0].xpos < 80) if (string[0].xpos < 80)
string[0].xpos = 80; string[0].xpos = 80;
if (string[0].xpos > 240) if (string[0].xpos > 240)
@ -301,7 +301,7 @@ void Scumm::CHARSET_1()
gdi._mask_left = string[0].xpos; gdi._mask_left = string[0].xpos;
gdi._mask_top = string[0].ypos; gdi._mask_top = string[0].ypos;
gdi._mask_bottom = string[0].ypos + 8; gdi._mask_bottom = string[0].ypos + 8;
gdi._mask_right = 320; gdi._mask_right = _realWidth;
if (string[0].ypos <= 16) // If we are cleaning the text line, clean 2 lines. if (string[0].ypos <= 16) // If we are cleaning the text line, clean 2 lines.
gdi._mask_bottom = 16; gdi._mask_bottom = 16;
} }
@ -458,7 +458,7 @@ void Scumm::description()
charset._top = string[0].ypos; charset._top = string[0].ypos;
charset._left = string[0].xpos; charset._left = string[0].xpos;
charset._left2 = string[0].xpos; charset._left2 = string[0].xpos;
charset._right = 319; charset._right = _realWidth - 1;
charset._xpos2 = string[0].xpos; charset._xpos2 = string[0].xpos;
charset._ypos2 = string[0].ypos; charset._ypos2 = string[0].ypos;
charset._disableOffsX = charset._unk12 = 1; charset._disableOffsX = charset._unk12 = 1;
@ -813,7 +813,7 @@ void CharsetRenderer::printCharOld(int chr)
_unk12 = 0; _unk12 = 0;
} }
char_ptr = _vm->getResourceAddress(rtCharset, _curId) + 224 + (chr + 1) * 8; char_ptr = _vm->getResourceAddress(rtCharset, _curId) + 224 + (chr + 1) * 8;
dest_ptr = vs->screenPtr + vs->xstart + (_top - vs->topline) * 320 + _left; dest_ptr = vs->screenPtr + vs->xstart + (_top - vs->topline) * _realWidth + _left;
_vm->updateDirtyRect(vs->number, _left, _left + 8, _top - vs->topline, _top - vs->topline + 8, 0); _vm->updateDirtyRect(vs->number, _left, _left + 8, _top - vs->topline, _top - vs->topline + 8, 0);
for (y = 0; y < 8; y++) { for (y = 0; y < 8; y++) {
@ -824,7 +824,7 @@ void CharsetRenderer::printCharOld(int chr)
} }
color = ((buffer & mask) != 0); color = ((buffer & mask) != 0);
if (color) if (color)
*(dest_ptr + y * 320 + x) = _color; *(dest_ptr + y * _realWidth + x) = _color;
} }
} }
@ -937,7 +937,7 @@ void CharsetRenderer::printChar(int chr)
_hasMask = true; _hasMask = true;
#endif #endif
_dest_ptr = _backbuff_ptr = vs->screenPtr + vs->xstart + _drawTop * 320 + _left; _dest_ptr = _backbuff_ptr = vs->screenPtr + vs->xstart + _drawTop * _realWidth + _left;
#if !defined(OLD) #if !defined(OLD)
if (_blitAlso) { if (_blitAlso) {
@ -945,7 +945,7 @@ void CharsetRenderer::printChar(int chr)
if (1) { if (1) {
#endif #endif
_dest_ptr = _bgbak_ptr = _vm->getResourceAddress(rtBuffer, vs->number + 5) _dest_ptr = _bgbak_ptr = _vm->getResourceAddress(rtBuffer, vs->number + 5)
+ vs->xstart + _drawTop * 320 + _left; + vs->xstart + _drawTop * _realWidth + _left;
} }
_mask_ptr = _vm->getResourceAddress(rtBuffer, 9) _mask_ptr = _vm->getResourceAddress(rtBuffer, 9)
@ -1012,7 +1012,7 @@ void CharsetRenderer::drawBits()
maskpos++; maskpos++;
} }
} }
dst = (_dest_ptr += 320); dst = (_dest_ptr += _realWidth);
mask += 40; mask += 40;
y++; y++;
} }