aboutsummaryrefslogtreecommitdiff
path: root/sky
diff options
context:
space:
mode:
authorJoost Peters2003-06-09 18:15:02 +0000
committerJoost Peters2003-06-09 18:15:02 +0000
commitd398b818f82c3d8d6e467c6e1ffbf13edc3e8d9c (patch)
tree4595c8fa5259a36710c7e488daf6b665082edf07 /sky
parent839cb1c4f76502352f56fe102116f2d8625df32b (diff)
downloadscummvm-rg350-d398b818f82c3d8d6e467c6e1ffbf13edc3e8d9c.tar.gz
scummvm-rg350-d398b818f82c3d8d6e467c6e1ffbf13edc3e8d9c.tar.bz2
scummvm-rg350-d398b818f82c3d8d6e467c6e1ffbf13edc3e8d9c.zip
added fnLookAt()
svn-id: r8418
Diffstat (limited to 'sky')
-rw-r--r--sky/logic.cpp23
-rw-r--r--sky/mouse.cpp6
-rw-r--r--sky/mouse.h2
3 files changed, 30 insertions, 1 deletions
diff --git a/sky/logic.cpp b/sky/logic.cpp
index 9f8b247e69..1f32ef5dc9 100644
--- a/sky/logic.cpp
+++ b/sky/logic.cpp
@@ -2206,7 +2206,28 @@ bool SkyLogic::fnPrintCredit(uint32 a, uint32 b, uint32 c) {
}
bool SkyLogic::fnLookAt(uint32 a, uint32 b, uint32 c) {
- error("Stub: fnLookAt");
+
+ struct lowTextManager_t textInfo = _skyText->lowTextManager(a, 240, 0, 248, true);
+ Compact *textCpt = SkyState::fetchCompact(textInfo.compactNum);
+ textCpt->xcood = 168;
+ textCpt->ycood = (uint16)c;
+
+ _skyScreen->recreate();
+ _skyScreen->spriteEngine();
+ _skyScreen->flip();
+
+ fnNoHuman(0, 0, 0);
+ _skyMouse->lockMouse();
+
+ //waitRelative(0);
+ _skyMouse->waitMouseNotPressed();
+ //waitRelative(40);
+
+ _skyMouse->unlockMouse();
+ fnAddHuman(0, 0, 0);
+ textCpt->status = 0;
+
+ return true;
}
bool SkyLogic::fnLincTextModule(uint32 a, uint32 b, uint32 c) {
diff --git a/sky/mouse.cpp b/sky/mouse.cpp
index dc82773561..88dc5260e8 100644
--- a/sky/mouse.cpp
+++ b/sky/mouse.cpp
@@ -85,6 +85,7 @@ SkyMouse::SkyMouse(OSystem *system, SkyDisk *skyDisk) {
_mouseHeight = 6;
_maskWidth = 6;
_maskHeight = 6;
+ _mouseB = 0;
_miceData = _skyDisk->loadFile(MICE_FILE, NULL);
fixMouseTransparency(_miceData, _skyDisk->_lastLoadedFileSize);
@@ -170,6 +171,11 @@ void SkyMouse::drawNewMouse() {
//drawMouse();
}
+void SkyMouse::waitMouseNotPressed(void) {
+ while (_mouseB != 0) ;
+ _bMouseB = 0;
+}
+
//original sky uses different colors for transparency than our backends do,
//so we simply swap our "transparent"-white with another one.
void SkyMouse::fixMouseTransparency(byte *mouseData, uint32 size) {
diff --git a/sky/mouse.h b/sky/mouse.h
index 22fa5bf81a..534df1c94e 100644
--- a/sky/mouse.h
+++ b/sky/mouse.h
@@ -47,6 +47,7 @@ public:
void spriteMouse(uint16 frameNum, uint8 mouseX, uint8 mouseY);
void useLogicInstance(SkyLogic *skyLogic) { _skyLogic = skyLogic; };
void buttonPressed(uint8 button) { _bMouseB = button; };
+ void waitMouseNotPressed(void);
uint16 giveMouseX(void) { return _aMouseX; };
uint16 giveMouseY(void) { return _aMouseY; };
@@ -56,6 +57,7 @@ protected:
void buttonEngine1(void);
void fixMouseTransparency(byte *mouseData, uint32 size);
+ uint16 _mouseB; //used to check for repeat presses
uint16 _eMouseB;
uint16 _bMouseB;