Cleanup.
svn-id: r26478
This commit is contained in:
parent
2aeb84f12a
commit
fe6b6323fa
6 changed files with 95 additions and 115 deletions
|
@ -1271,12 +1271,14 @@ public:
|
|||
void opp_restartClock();
|
||||
|
||||
protected:
|
||||
bool drawImages_clip(VC10_state *state);
|
||||
bool drawImage_clip(VC10_state *state);
|
||||
|
||||
void drawImages(VC10_state *state);
|
||||
void drawImages_Amiga(VC10_state *state);
|
||||
void drawImages_Simon(VC10_state *state);
|
||||
void drawImages_Feeble(VC10_state *state);
|
||||
void drawImage_init(VC10_state *state);
|
||||
|
||||
void drawImage(VC10_state *state);
|
||||
void drawImage_Amiga(VC10_state *state);
|
||||
void drawImage_Simon(VC10_state *state);
|
||||
void drawImage_Feeble(VC10_state *state);
|
||||
|
||||
void scaleClip(int16 h, int16 w, int16 y, int16 x, int16 scrollY);
|
||||
void horizontalScroll(VC10_state *state);
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
|
||||
#include "agos/agos.h"
|
||||
#include "agos/intern.h"
|
||||
#include "agos/vga.h"
|
||||
|
||||
namespace AGOS {
|
||||
|
||||
|
@ -53,8 +54,7 @@ byte *AGOSEngine::getScaleBuf() {
|
|||
void AGOSEngine::animateSprites() {
|
||||
VgaSprite *vsp;
|
||||
VgaPointersEntry *vpe;
|
||||
const byte *vc_ptr_org = _vcPtr;
|
||||
uint16 params[5]; // parameters to vc10
|
||||
VC10_state state;
|
||||
|
||||
if (_paletteFlag == 2)
|
||||
_paletteFlag = 1;
|
||||
|
@ -84,25 +84,13 @@ void AGOSEngine::animateSprites() {
|
|||
_vgaCurSpriteId = vsp->id;
|
||||
_vgaCurSpritePriority = vsp->priority;
|
||||
|
||||
params[0] = readUint16Wrapper(&vsp->image);
|
||||
if (getGameType() == GType_ELVIRA1 || getGameType() == GType_ELVIRA2 || getGameType() == GType_WW) {
|
||||
params[1] = readUint16Wrapper(&vsp->x);
|
||||
params[2] = readUint16Wrapper(&vsp->y);
|
||||
params[3] = READ_BE_UINT16(&vsp->flags);
|
||||
} else {
|
||||
params[1] = readUint16Wrapper(&vsp->palette);
|
||||
params[2] = readUint16Wrapper(&vsp->x);
|
||||
params[3] = readUint16Wrapper(&vsp->y);
|
||||
state.image = vsp->image;
|
||||
state.palette = (vsp->palette & 15) * 16;
|
||||
state.x = vsp->x;
|
||||
state.y = vsp->y;
|
||||
state.flags = vsp->flags;
|
||||
|
||||
if (getGameType() == GType_SIMON1) {
|
||||
params[4] = READ_BE_UINT16(&vsp->flags);
|
||||
} else {
|
||||
*(byte *)(¶ms[4]) = (byte)vsp->flags;
|
||||
}
|
||||
}
|
||||
|
||||
_vcPtr = (const byte *)params;
|
||||
vc10_draw();
|
||||
drawImage_init(&state);
|
||||
|
||||
vsp++;
|
||||
}
|
||||
|
@ -111,14 +99,12 @@ void AGOSEngine::animateSprites() {
|
|||
memset(_backBuf, 0, _screenWidth * _screenHeight);
|
||||
|
||||
_updateScreen = true;
|
||||
_vcPtr = vc_ptr_org;
|
||||
}
|
||||
|
||||
void AGOSEngine::animateSpritesDebug() {
|
||||
VgaSprite *vsp;
|
||||
VgaPointersEntry *vpe;
|
||||
const byte *vc_ptr_org = _vcPtr;
|
||||
uint16 params[5]; // parameters to vc10_draw
|
||||
VC10_state state;
|
||||
|
||||
if (_paletteFlag == 2)
|
||||
_paletteFlag = 1;
|
||||
|
@ -137,38 +123,25 @@ void AGOSEngine::animateSpritesDebug() {
|
|||
if (vsp->image)
|
||||
printf("id:%5d image:%3d base-color:%3d x:%3d y:%3d flags:%x\n",
|
||||
vsp->id, vsp->image, vsp->palette, vsp->x, vsp->y, vsp->flags);
|
||||
params[0] = readUint16Wrapper(&vsp->image);
|
||||
if (getGameType() == GType_ELVIRA1 || getGameType() == GType_ELVIRA2 || getGameType() == GType_WW) {
|
||||
params[1] = readUint16Wrapper(&vsp->x);
|
||||
params[2] = readUint16Wrapper(&vsp->y);
|
||||
params[3] = READ_BE_UINT16(&vsp->flags);
|
||||
} else {
|
||||
params[1] = readUint16Wrapper(&vsp->palette);
|
||||
params[2] = readUint16Wrapper(&vsp->x);
|
||||
params[3] = readUint16Wrapper(&vsp->y);
|
||||
|
||||
if (getGameType() == GType_SIMON1) {
|
||||
params[4] = READ_BE_UINT16(&vsp->flags);
|
||||
} else {
|
||||
*(byte *)(¶ms[4]) = (byte)vsp->flags;
|
||||
}
|
||||
}
|
||||
state.image = vsp->image;
|
||||
state.palette = (vsp->palette & 15) * 16;
|
||||
state.x = vsp->x;
|
||||
state.y = vsp->y;
|
||||
state.flags = vsp->flags;
|
||||
|
||||
_vcPtr = (const byte *)params;
|
||||
vc10_draw();
|
||||
drawImage_init(&state);
|
||||
|
||||
vsp++;
|
||||
}
|
||||
|
||||
_updateScreen = true;
|
||||
_vcPtr = vc_ptr_org;
|
||||
}
|
||||
|
||||
void AGOSEngine::animateSpritesByY() {
|
||||
VgaSprite *vsp;
|
||||
VgaPointersEntry *vpe;
|
||||
const byte *vc_ptr_org = _vcPtr;
|
||||
uint16 params[5]; // parameters to vc10
|
||||
VC10_state state;
|
||||
int16 spriteTable[180][2];
|
||||
|
||||
byte *src;
|
||||
|
@ -216,6 +189,7 @@ void AGOSEngine::animateSpritesByY() {
|
|||
}
|
||||
|
||||
vsp = &_vgaSprites[slot];
|
||||
|
||||
vsp->windowNum &= 0x7FFF;
|
||||
|
||||
vpe = &_vgaBufferPointers[vsp->zoneNum];
|
||||
|
@ -226,18 +200,16 @@ void AGOSEngine::animateSpritesByY() {
|
|||
_vgaCurSpriteId = vsp->id;
|
||||
_vgaCurSpritePriority = vsp->priority;
|
||||
|
||||
params[0] = readUint16Wrapper(&vsp->image);
|
||||
params[1] = readUint16Wrapper(&vsp->palette);
|
||||
params[2] = readUint16Wrapper(&vsp->x);
|
||||
params[3] = readUint16Wrapper(&vsp->y);
|
||||
*(byte *)(¶ms[4]) = (byte)vsp->flags;
|
||||
state.image = vsp->image;
|
||||
state.palette = 0;
|
||||
state.x = vsp->x;
|
||||
state.y = vsp->y;
|
||||
state.flags = vsp->flags;
|
||||
|
||||
_vcPtr = (const byte *)params;
|
||||
vc10_draw();
|
||||
drawImage_init(&state);
|
||||
}
|
||||
|
||||
_updateScreen = true;
|
||||
_vcPtr = vc_ptr_org;
|
||||
}
|
||||
|
||||
void AGOSEngine::displayBoxStars() {
|
||||
|
|
|
@ -166,7 +166,7 @@ void AGOSEngine::decodeRow(byte *dst, const byte *src, int width) {
|
|||
}
|
||||
}
|
||||
|
||||
bool AGOSEngine::drawImages_clip(VC10_state *state) {
|
||||
bool AGOSEngine::drawImage_clip(VC10_state *state) {
|
||||
const uint16 *vlut;
|
||||
uint maxWidth, maxHeight;
|
||||
int cur;
|
||||
|
@ -224,7 +224,7 @@ bool AGOSEngine::drawImages_clip(VC10_state *state) {
|
|||
return 1;
|
||||
}
|
||||
|
||||
void AGOSEngine::drawImages_Feeble(VC10_state *state) {
|
||||
void AGOSEngine::drawImage_Feeble(VC10_state *state) {
|
||||
if (state->flags & kDFCompressed) {
|
||||
if (state->flags & kDFScaled) {
|
||||
state->surf_addr = getScaleBuf();
|
||||
|
@ -293,7 +293,7 @@ void AGOSEngine::drawImages_Feeble(VC10_state *state) {
|
|||
scaleClip(_scaleHeight, _scaleWidth, _scaleY, _scaleX, _scaleY + _scrollY);
|
||||
}
|
||||
} else {
|
||||
if (drawImages_clip(state) == 0)
|
||||
if (drawImage_clip(state) == 0)
|
||||
return;
|
||||
|
||||
state->surf_addr += state->x + state->y * state->surf_pitch;
|
||||
|
@ -359,7 +359,7 @@ void AGOSEngine::drawImages_Feeble(VC10_state *state) {
|
|||
}
|
||||
}
|
||||
} else {
|
||||
if (drawImages_clip(state) == 0)
|
||||
if (drawImage_clip(state) == 0)
|
||||
return;
|
||||
|
||||
state->surf_addr += state->x + state->y * state->surf_pitch;
|
||||
|
@ -387,10 +387,10 @@ void AGOSEngine::drawImages_Feeble(VC10_state *state) {
|
|||
}
|
||||
}
|
||||
|
||||
void AGOSEngine::drawImages_Simon(VC10_state *state) {
|
||||
void AGOSEngine::drawImage_Simon(VC10_state *state) {
|
||||
const uint16 *vlut = &_videoWindows[_windowNum * 4];
|
||||
|
||||
if (drawImages_clip(state) == 0)
|
||||
if (drawImage_clip(state) == 0)
|
||||
return;
|
||||
|
||||
uint xoffs, yoffs;
|
||||
|
@ -583,12 +583,12 @@ void AGOSEngine::drawImages_Simon(VC10_state *state) {
|
|||
}
|
||||
}
|
||||
|
||||
void AGOSEngine::drawImages_Amiga(VC10_state *state) {
|
||||
void AGOSEngine::drawImage_Amiga(VC10_state *state) {
|
||||
uint8 *dst;
|
||||
const byte *src;
|
||||
const uint16 *vlut = &_videoWindows[_windowNum * 4];
|
||||
|
||||
if (drawImages_clip(state) == 0)
|
||||
if (drawImage_clip(state) == 0)
|
||||
return;
|
||||
|
||||
uint xoffs = ((vlut[0] - _videoWindows[16]) * 2 + state->x) * 8;
|
||||
|
@ -638,10 +638,10 @@ void AGOSEngine::drawImages_Amiga(VC10_state *state) {
|
|||
}
|
||||
}
|
||||
|
||||
void AGOSEngine::drawImages(VC10_state *state) {
|
||||
void AGOSEngine::drawImage(VC10_state *state) {
|
||||
const uint16 *vlut = &_videoWindows[_windowNum * 4];
|
||||
|
||||
if (drawImages_clip(state) == 0)
|
||||
if (drawImage_clip(state) == 0)
|
||||
return;
|
||||
|
||||
uint xoffs, yoffs;
|
||||
|
|
|
@ -990,7 +990,7 @@ void AGOSEngine::printScroll() {
|
|||
state.surf_addr = getBackBuf();
|
||||
state.surf_pitch = _dxSurfacePitch;
|
||||
|
||||
drawImages(&state);
|
||||
drawImage(&state);
|
||||
}
|
||||
|
||||
} // End of namespace AGOS
|
||||
|
|
|
@ -578,30 +578,20 @@ byte *AGOSEngine::vc10_flip(const byte *src, uint w, uint h) {
|
|||
}
|
||||
|
||||
void AGOSEngine::vc10_draw() {
|
||||
byte *p2;
|
||||
uint width, height;
|
||||
byte flags;
|
||||
VC10_state state;
|
||||
|
||||
state.image = (int16)vcReadNextWord();
|
||||
if (state.image == 0)
|
||||
return;
|
||||
|
||||
state.palette = 0;
|
||||
if (getGameType() == GType_FF || getGameType() == GType_PP) {
|
||||
state.palette = (_vcPtr[0] * 16);
|
||||
_vcPtr += 2;
|
||||
} else if (getGameType() == GType_SIMON1 || getGameType() == GType_SIMON2) {
|
||||
state.palette = (_vcPtr[1] * 16);
|
||||
_vcPtr += 2;
|
||||
} else {
|
||||
state.palette = 0;
|
||||
}
|
||||
|
||||
state.x = (int16)vcReadNextWord();
|
||||
state.x -= _scrollX;
|
||||
|
||||
state.y = (int16)vcReadNextWord();
|
||||
state.y -= _scrollY;
|
||||
|
||||
if (getGameType() == GType_SIMON2 || getGameType() == GType_FF || getGameType() == GType_PP) {
|
||||
state.flags = vcReadNextByte();
|
||||
|
@ -609,11 +599,25 @@ void AGOSEngine::vc10_draw() {
|
|||
state.flags = vcReadNextWord();
|
||||
}
|
||||
|
||||
if (state.image < 0)
|
||||
state.image = vcReadVar(-state.image);
|
||||
drawImage_init(&state);
|
||||
}
|
||||
|
||||
p2 = _curVgaFile2 + state.image * 8;
|
||||
state.depack_src = _curVgaFile2 + readUint32Wrapper(p2);
|
||||
void AGOSEngine::drawImage_init(VC10_state *state) {
|
||||
if (state->image == 0)
|
||||
return;
|
||||
|
||||
byte *p2;
|
||||
uint width, height;
|
||||
byte flags;
|
||||
|
||||
state->x -= _scrollX;
|
||||
state->y -= _scrollY;
|
||||
|
||||
if (state->image < 0)
|
||||
state->image = vcReadVar(-state->image);
|
||||
|
||||
p2 = _curVgaFile2 + state->image * 8;
|
||||
state->depack_src = _curVgaFile2 + readUint32Wrapper(p2);
|
||||
if (getGameType() == GType_FF || getGameType() == GType_PP) {
|
||||
width = READ_LE_UINT16(p2 + 6);
|
||||
height = READ_LE_UINT16(p2 + 4) & 0x7FFF;
|
||||
|
@ -628,74 +632,74 @@ void AGOSEngine::vc10_draw() {
|
|||
return;
|
||||
|
||||
if (_dumpImages)
|
||||
dumpSingleBitmap(_vgaCurZoneNum, state.image, state.depack_src, width, height,
|
||||
state.palette);
|
||||
state.width = state.draw_width = width; /* cl */
|
||||
state.height = state.draw_height = height; /* ch */
|
||||
dumpSingleBitmap(_vgaCurZoneNum, state->image, state->depack_src, width, height,
|
||||
state->palette);
|
||||
state->width = state->draw_width = width; /* cl */
|
||||
state->height = state->draw_height = height; /* ch */
|
||||
|
||||
state.depack_cont = -0x80;
|
||||
state->depack_cont = -0x80;
|
||||
|
||||
state.x_skip = 0; /* colums to skip = bh */
|
||||
state.y_skip = 0; /* rows to skip = bl */
|
||||
state->x_skip = 0; /* colums to skip = bh */
|
||||
state->y_skip = 0; /* rows to skip = bl */
|
||||
|
||||
if (getFeatures() & GF_PLANAR) {
|
||||
state.depack_src = convertImage(&state, ((flags & 0x80) != 0));
|
||||
state->depack_src = convertImage(state, ((flags & 0x80) != 0));
|
||||
|
||||
// converted planar clip is already uncompressed
|
||||
if (state.flags & kDFCompressedFlip) {
|
||||
state.flags &= ~kDFCompressedFlip;
|
||||
state.flags |= kDFFlip;
|
||||
if (state->flags & kDFCompressedFlip) {
|
||||
state->flags &= ~kDFCompressedFlip;
|
||||
state->flags |= kDFFlip;
|
||||
}
|
||||
if (state.flags & kDFCompressed) {
|
||||
state.flags &= ~kDFCompressed;
|
||||
if (state->flags & kDFCompressed) {
|
||||
state->flags &= ~kDFCompressed;
|
||||
}
|
||||
} else if (getGameType() == GType_FF || getGameType() == GType_PP) {
|
||||
if (flags & 0x80) {
|
||||
state.flags |= kDFCompressed;
|
||||
state->flags |= kDFCompressed;
|
||||
}
|
||||
} else {
|
||||
if (flags & 0x80 && !(state.flags & kDFCompressedFlip)) {
|
||||
if (state.flags & kDFFlip) {
|
||||
state.flags &= ~kDFFlip;
|
||||
state.flags |= kDFCompressedFlip;
|
||||
if (flags & 0x80 && !(state->flags & kDFCompressedFlip)) {
|
||||
if (state->flags & kDFFlip) {
|
||||
state->flags &= ~kDFFlip;
|
||||
state->flags |= kDFCompressedFlip;
|
||||
} else {
|
||||
state.flags |= kDFCompressed;
|
||||
state->flags |= kDFCompressed;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
uint maxWidth = (getGameType() == GType_FF || getGameType() == GType_PP) ? 640 : 20;
|
||||
if ((getGameType() == GType_SIMON2 || getGameType() == GType_FF) && width > maxWidth) {
|
||||
horizontalScroll(&state);
|
||||
horizontalScroll(state);
|
||||
return;
|
||||
}
|
||||
if (getGameType() == GType_FF && height > 480) {
|
||||
verticalScroll(&state);
|
||||
verticalScroll(state);
|
||||
return;
|
||||
}
|
||||
|
||||
if (getGameType() != GType_FF && getGameType() != GType_PP) {
|
||||
if (state.flags & kDFCompressedFlip) {
|
||||
state.depack_src = vc10_uncompressFlip(state.depack_src, width, height);
|
||||
} else if (state.flags & kDFFlip) {
|
||||
state.depack_src = vc10_flip(state.depack_src, width, height);
|
||||
if (state->flags & kDFCompressedFlip) {
|
||||
state->depack_src = vc10_uncompressFlip(state->depack_src, width, height);
|
||||
} else if (state->flags & kDFFlip) {
|
||||
state->depack_src = vc10_flip(state->depack_src, width, height);
|
||||
}
|
||||
}
|
||||
|
||||
state.surf2_addr = getFrontBuf();
|
||||
state.surf2_pitch = _dxSurfacePitch;
|
||||
state->surf2_addr = getFrontBuf();
|
||||
state->surf2_pitch = _dxSurfacePitch;
|
||||
|
||||
state.surf_addr = getBackBuf();
|
||||
state.surf_pitch = _dxSurfacePitch;
|
||||
state->surf_addr = getBackBuf();
|
||||
state->surf_pitch = _dxSurfacePitch;
|
||||
|
||||
if (getGameType() == GType_FF || getGameType() == GType_PP) {
|
||||
drawImages_Feeble(&state);
|
||||
drawImage_Feeble(state);
|
||||
} else if (getFeatures() & GF_32COLOR) {
|
||||
drawImages_Amiga(&state);
|
||||
drawImage_Amiga(state);
|
||||
} else if (getGameType() == GType_SIMON1 || getGameType() == GType_SIMON2) {
|
||||
drawImages_Simon(&state);
|
||||
drawImage_Simon(state);
|
||||
} else {
|
||||
drawImages(&state);
|
||||
drawImage(state);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -134,6 +134,8 @@ struct VC10_state {
|
|||
int8 depack_cont;
|
||||
|
||||
byte depack_dest[480];
|
||||
|
||||
VC10_state() { memset(this, 0, sizeof(*this)); }
|
||||
};
|
||||
|
||||
byte *vc10_depackColumn(VC10_state *vs);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue