diff options
Diffstat (limited to 'sky/mouse.cpp')
-rw-r--r-- | sky/mouse.cpp | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/sky/mouse.cpp b/sky/mouse.cpp new file mode 100644 index 0000000000..0b21d93fe4 --- /dev/null +++ b/sky/mouse.cpp @@ -0,0 +1,172 @@ +/* ScummVM - Scumm Interpreter + * Copyright (C) 2003 The ScummVM project + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * $Header$ + * + */ + +#include "stdafx.h" +#include "sky/sky.h" + +#define MICE_FILE 60300 +#define NO_MAIN_OBJECTS 24 +#define NO_LINC_OBJECTS 21 + +uint32 _mouseObjectList[] = { + + 65, + 9, + 66, + 64, + 8, + 63, + 10, + 11, + 71, + 76, + 37, + 36, + 42, + 75, + 79, + 6, + 74, + 39, + 49, + 43, + 34, + 35, + 77, + 38, + + //Link cursors + + 24625, + 24649, + 24827, + 24651, + 24583, + 24581, + 24582, + 24628, + 24650, + 24629, + 24732, + 24631, + 24584, + 24630, + 24626, + 24627, + 24632, + 24643, + 24828, + 24830, + 24829 +}; + +SkyMouse::SkyMouse(SkyDisk *skyDisk) { + + _skyDisk = skyDisk; + _mouseWidth = 6; + _mouseHeight = 6; + _maskWidth = 6; + _maskHeight = 6; + + _miceData = _skyDisk->loadFile(MICE_FILE, NULL); + _mouseData2 = _miceData; + + uint16 width = FROM_LE_16(((struct dataFileHeader *)_miceData)->s_width); + uint16 height = FROM_LE_16(((struct dataFileHeader *)_miceData)->s_height); + + _savedData = (byte *)malloc((width * height) + sizeof(struct dataFileHeader)); + + //load in the object mouse file + _objectMouseData = _skyDisk->loadFile(MICE_FILE + 1, NULL); + _mouseWidth = 1; + _mouseHeight = 1; + + //_systemFlags |= SF_MOUSE;; + +} + +SkyMouse::~SkyMouse( ){ + free (_miceData); + free (_savedData); + free (_objectMouseData); +} + +void SkyMouse::replaceMouseCursors(uint16 fileNo) { + + _skyDisk->loadFile(fileNo, _objectMouseData); + +} + +uint32 SkyMouse::fnBlankMouse(void) { + + _mouseXOff = 0; //re-align mouse + spriteMouse(MOUSE_BLANK, 0, 0); + + return 1; + +} + +void SkyMouse::lockMouse(void) { + + _lockMouseX = _aMouseX; + _lockMouseY = _aMouseY; + +} + +void SkyMouse::unlockMouse(void) { + + _aMouseX = _lockMouseX; + _aMouseY = _lockMouseY; + +} + +void SkyMouse::restoreMouseData(uint16 frameNum) { + warning("Stub: SkyMouse::restoreMouseData"); +} + +void SkyMouse::drawNewMouse() { + warning("Stub: SkyMouse::drawNewMouse"); + //calculateMouseValues(); + //saveMouseData(); + //drawMouse(); +} + +void SkyMouse::spriteMouse(uint16 frameNum, uint16 mouseX, uint16 mouseY) { + + //_mouseFlag |= MF_IN_INT; + _mouseType2 = frameNum; + _mouseOffsetX = mouseX; + _mouseOffsetY = mouseY; + + restoreMouseData(frameNum); + + byte *mouseData = _miceData; + uint32 pos = ((struct dataFileHeader *)mouseData)->s_sp_size * ((struct dataFileHeader *)mouseData)->s_sp_size; + pos += sizeof(struct dataFileHeader); + _mouseData2 = mouseData + pos; + + _mouseWidth = ((struct dataFileHeader *)mouseData)->s_width; + _mouseHeight = ((struct dataFileHeader *)mouseData)->s_height; + + drawNewMouse(); + + //_mouseFlag ^= (~_mouseFlag | MF_IN_INT); +} |