LOL: - implemented urbish mines gas explosion
svn-id: r41035
This commit is contained in:
parent
8e2af8ff7c
commit
86d78bbc8b
5 changed files with 76 additions and 18 deletions
|
@ -749,6 +749,7 @@ private:
|
|||
int olol_paletteFlash(EMCState *script);
|
||||
int olol_disableControls(EMCState *script);
|
||||
int olol_enableControls(EMCState *script);
|
||||
int olol_gasExplosion(EMCState *script);
|
||||
int olol_characterSays(EMCState *script);
|
||||
int olol_queueSpeech(EMCState *script);
|
||||
int olol_getItemPrice(EMCState *script);
|
||||
|
@ -982,7 +983,9 @@ private:
|
|||
void movePartySmoothScrollTurnRight(int speed);
|
||||
|
||||
void pitDropScroll(int numSteps);
|
||||
|
||||
void shakeScene(int duration, int width, int height, int restore);
|
||||
void processGasExplosion(int soundId);
|
||||
|
||||
int smoothScrollDrawSpecialGuiShape(int pageNum);
|
||||
|
||||
|
|
|
@ -1021,7 +1021,7 @@ void LoLEngine::movePartySmoothScrollUp(int speed) {
|
|||
_screen->smoothScrollZoomStepBottom(6, 2, _scrollXBottom[i], _scrollYBottom[i]);
|
||||
|
||||
if (d)
|
||||
_screen->copyGuiShapeToSurface(_tempBuffer5120, 2);
|
||||
_screen->copyGuiShapeToSurface(14, 2);
|
||||
|
||||
_screen->restoreSceneWindow(2, 0);
|
||||
_screen->updateScreen();
|
||||
|
@ -1032,7 +1032,7 @@ void LoLEngine::movePartySmoothScrollUp(int speed) {
|
|||
}
|
||||
|
||||
if (d)
|
||||
_screen->copyGuiShapeToSurface(_tempBuffer5120, 12);
|
||||
_screen->copyGuiShapeToSurface(14, 12);
|
||||
|
||||
if (_sceneDefaultUpdate != 2) {
|
||||
_screen->restoreSceneWindow(12, 0);
|
||||
|
@ -1056,7 +1056,7 @@ void LoLEngine::movePartySmoothScrollDown(int speed) {
|
|||
_screen->smoothScrollZoomStepBottom(6, 2, _scrollXBottom[i], _scrollYBottom[i]);
|
||||
|
||||
if (d)
|
||||
_screen->copyGuiShapeToSurface(_tempBuffer5120, 2);
|
||||
_screen->copyGuiShapeToSurface(14, 2);
|
||||
|
||||
_screen->restoreSceneWindow(2, 0);
|
||||
_screen->updateScreen();
|
||||
|
@ -1067,7 +1067,7 @@ void LoLEngine::movePartySmoothScrollDown(int speed) {
|
|||
}
|
||||
|
||||
if (d)
|
||||
_screen->copyGuiShapeToSurface(_tempBuffer5120, 12);
|
||||
_screen->copyGuiShapeToSurface(14, 12);
|
||||
|
||||
if (_sceneDefaultUpdate != 2) {
|
||||
_screen->restoreSceneWindow(6, 0);
|
||||
|
@ -1155,7 +1155,7 @@ void LoLEngine::movePartySmoothScrollTurnLeft(int speed) {
|
|||
_smoothScrollTimer = _system->getMillis() + speed * _tickLength;
|
||||
_screen->smoothScrollTurnStep1(_sceneDrawPage1, _sceneDrawPage2, dp);
|
||||
if (d)
|
||||
_screen->copyGuiShapeToSurface(_tempBuffer5120, dp);
|
||||
_screen->copyGuiShapeToSurface(14, dp);
|
||||
_screen->restoreSceneWindow(dp, 0);
|
||||
_screen->updateScreen();
|
||||
fadeText();
|
||||
|
@ -1164,7 +1164,7 @@ void LoLEngine::movePartySmoothScrollTurnLeft(int speed) {
|
|||
_smoothScrollTimer = _system->getMillis() + speed * _tickLength;
|
||||
_screen->smoothScrollTurnStep2(_sceneDrawPage1, _sceneDrawPage2, dp);
|
||||
if (d)
|
||||
_screen->copyGuiShapeToSurface(_tempBuffer5120, dp);
|
||||
_screen->copyGuiShapeToSurface(14, dp);
|
||||
_screen->restoreSceneWindow(dp, 0);
|
||||
_screen->updateScreen();
|
||||
fadeText();
|
||||
|
@ -1173,7 +1173,7 @@ void LoLEngine::movePartySmoothScrollTurnLeft(int speed) {
|
|||
_smoothScrollTimer = _system->getMillis() + speed * _tickLength;
|
||||
_screen->smoothScrollTurnStep3(_sceneDrawPage1, _sceneDrawPage2, dp);
|
||||
if (d)
|
||||
_screen->copyGuiShapeToSurface(_tempBuffer5120, dp);
|
||||
_screen->copyGuiShapeToSurface(14, dp);
|
||||
_screen->restoreSceneWindow(dp, 0);
|
||||
_screen->updateScreen();
|
||||
fadeText();
|
||||
|
@ -1199,7 +1199,7 @@ void LoLEngine::movePartySmoothScrollTurnRight(int speed) {
|
|||
_smoothScrollTimer = _system->getMillis() + speed * _tickLength;
|
||||
_screen->smoothScrollTurnStep3(_sceneDrawPage2, _sceneDrawPage1, dp);
|
||||
if (d)
|
||||
_screen->copyGuiShapeToSurface(_tempBuffer5120, dp);
|
||||
_screen->copyGuiShapeToSurface(14, dp);
|
||||
_screen->restoreSceneWindow(dp, 0);
|
||||
_screen->updateScreen();
|
||||
fadeText();
|
||||
|
@ -1208,7 +1208,7 @@ void LoLEngine::movePartySmoothScrollTurnRight(int speed) {
|
|||
_smoothScrollTimer = _system->getMillis() + speed * _tickLength;
|
||||
_screen->smoothScrollTurnStep2(_sceneDrawPage2, _sceneDrawPage1, dp);
|
||||
if (d)
|
||||
_screen->copyGuiShapeToSurface(_tempBuffer5120, dp);
|
||||
_screen->copyGuiShapeToSurface(14, dp);
|
||||
_screen->restoreSceneWindow(dp, 0);
|
||||
_screen->updateScreen();
|
||||
fadeText();
|
||||
|
@ -1217,7 +1217,7 @@ void LoLEngine::movePartySmoothScrollTurnRight(int speed) {
|
|||
_smoothScrollTimer = _system->getMillis() + speed * _tickLength;
|
||||
_screen->smoothScrollTurnStep1(_sceneDrawPage2, _sceneDrawPage1, dp);
|
||||
if (d)
|
||||
_screen->copyGuiShapeToSurface(_tempBuffer5120, dp);
|
||||
_screen->copyGuiShapeToSurface(14, dp);
|
||||
_screen->restoreSceneWindow(dp, 0);
|
||||
_screen->updateScreen();
|
||||
fadeText();
|
||||
|
@ -1300,13 +1300,62 @@ void LoLEngine::shakeScene(int duration, int width, int height, int restore) {
|
|||
}
|
||||
}
|
||||
|
||||
void LoLEngine::processGasExplosion(int soundId) {
|
||||
int cp = _screen->setCurPage(2);
|
||||
_screen->copyPage(0, 12);
|
||||
|
||||
static const uint8 sounds[] = { 0x62, 0xA7, 0xA7, 0xA8 };
|
||||
snd_playSoundEffect(sounds[soundId], -1);
|
||||
|
||||
uint16 targetBlock = 0;
|
||||
int dist = getSpellTargetBlock(_currentBlock, _currentDirection, 3, targetBlock);
|
||||
|
||||
uint8 *p1 = _screen->getPalette(1);
|
||||
uint8 *p2 = _screen->getPalette(3);
|
||||
|
||||
if (dist) {
|
||||
WSAMovie_v2 *mov = new WSAMovie_v2(this, _screen);
|
||||
char file[13];
|
||||
snprintf(file, 13, "gasexp%0d.wsa", dist);
|
||||
mov->open(file, 1, 0);
|
||||
if (!mov->opened())
|
||||
error("Gas: Unable to load gasexp.wsa");
|
||||
|
||||
playSpellAnimation(mov, 0, 6, 1, (176 - mov->width()) / 2 + 112, (120 - mov->height()) / 2, 0, 0, 0, 0, false);
|
||||
|
||||
mov->close();
|
||||
delete mov;
|
||||
|
||||
} else {
|
||||
memcpy(p2, p1, 768);
|
||||
|
||||
for (int i = 1; i < 128; i++)
|
||||
p2[i * 3] = 0x3f;
|
||||
|
||||
uint32 ctime = _system->getMillis();
|
||||
while (_screen->fadePaletteStep(_screen->_currentPalette, p2, _system->getMillis() - ctime, 10))
|
||||
updateInput();
|
||||
|
||||
ctime = _system->getMillis();
|
||||
while (_screen->fadePaletteStep(p2, _screen->_currentPalette, _system->getMillis() - ctime, 50))
|
||||
updateInput();
|
||||
}
|
||||
|
||||
_screen->copyPage(12, 2);
|
||||
_screen->setCurPage(cp);
|
||||
|
||||
updateDrawPage2();
|
||||
_sceneUpdateRequired = true;
|
||||
gui_drawScene(0);
|
||||
}
|
||||
|
||||
int LoLEngine::smoothScrollDrawSpecialGuiShape(int pageNum) {
|
||||
if(!_specialGuiShape)
|
||||
return 0;
|
||||
|
||||
_screen->clearGuiShapeMemory(pageNum);
|
||||
_screen->drawShape(pageNum, _specialGuiShape, _specialGuiShapeX, _specialGuiShapeY, 2, 0);
|
||||
_screen->copyGuiShapeFromSceneBackupBuffer(pageNum, _tempBuffer5120);
|
||||
_screen->copyGuiShapeFromSceneBackupBuffer(pageNum, 14);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -327,9 +327,9 @@ void Screen_LoL::clearGuiShapeMemory(int pageNum) {
|
|||
}
|
||||
}
|
||||
|
||||
void Screen_LoL::copyGuiShapeFromSceneBackupBuffer(int srcPageNum, uint8 *dstBuffer) {
|
||||
void Screen_LoL::copyGuiShapeFromSceneBackupBuffer(int srcPageNum, int dstPageNum) {
|
||||
uint8 *src = getPagePtr(srcPageNum) + 0x79c3;
|
||||
uint8 *dst = dstBuffer;
|
||||
uint8 *dst = getPagePtr(dstPageNum);
|
||||
|
||||
for (int i = 0; i < 23; i++) {
|
||||
uint8 len = 0;
|
||||
|
@ -349,8 +349,8 @@ void Screen_LoL::copyGuiShapeFromSceneBackupBuffer(int srcPageNum, uint8 *dstBu
|
|||
}
|
||||
}
|
||||
|
||||
void Screen_LoL::copyGuiShapeToSurface(uint8 *srcBuffer, int dstPageNum) {
|
||||
uint8 *src = srcBuffer;
|
||||
void Screen_LoL::copyGuiShapeToSurface(int srcPageNum, int dstPageNum) {
|
||||
uint8 *src = getPagePtr(srcPageNum);
|
||||
uint8 *dst = getPagePtr(dstPageNum) + 0xe7c3;
|
||||
|
||||
for (int i = 0; i < 23; i++) {
|
||||
|
|
|
@ -56,8 +56,8 @@ public:
|
|||
void backupSceneWindow(int srcPageNum, int dstPageNum);
|
||||
void restoreSceneWindow(int srcPageNum, int dstPageNum);
|
||||
void clearGuiShapeMemory(int pageNum);
|
||||
void copyGuiShapeFromSceneBackupBuffer(int srcPageNum, uint8 *dstBuffer);
|
||||
void copyGuiShapeToSurface(uint8 *srcBuffer, int dstPageNum);
|
||||
void copyGuiShapeFromSceneBackupBuffer(int srcPageNum, int dstPageNum);
|
||||
void copyGuiShapeToSurface(int srcPageNum, int dstPageNum);
|
||||
void smoothScrollZoomStepTop(int srcPageNum, int dstPageNum, int x, int y);
|
||||
void smoothScrollZoomStepBottom(int srcPageNum, int dstPageNum, int x, int y);
|
||||
void smoothScrollHorizontalStep(int pageNum, int x, int u2, int w);
|
||||
|
|
|
@ -2044,6 +2044,12 @@ int LoLEngine::olol_enableControls(EMCState *script) {
|
|||
return gui_enableControls();
|
||||
}
|
||||
|
||||
int LoLEngine::olol_gasExplosion(EMCState *script) {
|
||||
debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_gasExplosion(%p) (%d)", (const void *)script, stackPos(0));
|
||||
processGasExplosion(stackPos(0));
|
||||
return 1;
|
||||
}
|
||||
|
||||
int LoLEngine::olol_characterSays(EMCState *script) {
|
||||
debugC(3, kDebugLevelScriptFuncs, "LoLEngine::olol_characterSays(%p) (%d, %d, %d)", (const void *)script, stackPos(0), stackPos(1), stackPos(2));
|
||||
if (stackPos(0) == -1) {
|
||||
|
@ -2599,7 +2605,7 @@ void LoLEngine::setupOpcodeTable() {
|
|||
// 0xB4
|
||||
Opcode(olol_enableControls);
|
||||
OpcodeUnImpl();
|
||||
OpcodeUnImpl();
|
||||
Opcode(olol_gasExplosion);
|
||||
OpcodeUnImpl();
|
||||
|
||||
// 0xB8
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue