[Scummvm-cvs-logs] SF.net SVN: scummvm: [21782] scummvm/trunk/engines/lure
dreammaster at users.sourceforge.net
dreammaster at users.sourceforge.net
Tue Apr 11 03:49:06 CEST 2006
Revision: 21782
Author: dreammaster
Date: 2006-04-11 03:48:28 -0700 (Tue, 11 Apr 2006)
ViewCVS: http://svn.sourceforge.net/scummvm/?rev=21782&view=rev
Log Message:
-----------
Implemented better handling of changing rooms via room exits
Modified Paths:
--------------
scummvm/trunk/engines/lure/game.cpp
scummvm/trunk/engines/lure/game.h
Modified: scummvm/trunk/engines/lure/game.cpp
===================================================================
--- scummvm/trunk/engines/lure/game.cpp 2006-04-11 10:46:36 UTC (rev 21781)
+++ scummvm/trunk/engines/lure/game.cpp 2006-04-11 10:48:28 UTC (rev 21782)
@@ -158,13 +158,19 @@
handleClick();
}
- uint16 destRoom = fields.getField(NEW_ROOM_NUMBER);
+ uint16 destRoom;
+ destRoom = fields.getField(NEW_ROOM_NUMBER);
if (destRoom != 0) {
// Need to change the current room
bool remoteFlag = fields.getField(OLD_ROOM_NUMBER) != 0;
r.setRoomNumber(destRoom, remoteFlag);
fields.setField(NEW_ROOM_NUMBER, 0);
}
+
+ destRoom = fields.playerNewPos().roomNumber;
+ if (destRoom != 0) {
+ playerChangeRoom();
+ }
}
r.leaveRoom();
@@ -238,6 +244,22 @@
}
}
+void Game::playerChangeRoom() {
+ Resources &res = Resources::getReference();
+ Room &room = Room::getReference();
+ ValueTableData &fields = res.fieldList();
+ uint16 roomNum = fields.playerNewPos().roomNumber;
+ fields.playerNewPos().roomNumber = 0;
+ Point &newPos = fields.playerNewPos().position;
+
+ Hotspot *player = res.getActiveHotspot(PLAYER_ID);
+ player->currentActions().clear();
+ player->setRoomNumber(roomNum);
+ //player->setPosition((newPos.x & 0xfff8) || 5, newPos.y & 0xfff8);
+ player->setPosition(newPos.x, newPos.y);
+ room.setRoomNumber(roomNum, false);
+}
+
void Game::handleClick() {
Resources &res = Resources::getReference();
Room &room = Room::getReference();
@@ -250,12 +272,12 @@
room.setTalkDialog(0, 0);
} else if (oldRoomNumber != 0) {
// Viewing a room remotely - handle returning to prior room
- // TODO: check data_1138 check when room number is 35
-
- // Reset player tick proc and signal to change back to the old room
- res.getActiveHotspot(PLAYER_ID)->setTickProc(PLAYER_TICK_PROC_ID);
- fields.setField(NEW_ROOM_NUMBER, oldRoomNumber);
- fields.setField(OLD_ROOM_NUMBER, 0);
+ if ((room.roomNumber() != 35) || (fields.getField(87) == 0)) {
+ // Reset player tick proc and signal to change back to the old room
+ res.getActiveHotspot(PLAYER_ID)->setTickProc(PLAYER_TICK_PROC_ID);
+ fields.setField(NEW_ROOM_NUMBER, oldRoomNumber);
+ fields.setField(OLD_ROOM_NUMBER, 0);
+ }
} else if (res.getTalkState() != TALK_NONE) {
// Currently talking, so let it's tick proc handle it
} else if (mouse.y() < MENUBAR_Y_SIZE) {
@@ -353,11 +375,11 @@
Mouse &mouse = Mouse::getReference();
Resources &res = Resources::getReference();
ValueTableData &fields = res.fieldList();
+ Hotspot *player = res.getActiveHotspot(PLAYER_ID);
- if (room.hotspotId() && !room.isExit()) {
+ if ((room.destRoomNumber() == 0) && (room.hotspotId() != 0)) {
// Handle look at hotspot
HotspotData *hs = res.getHotspot(room.hotspotId());
- Hotspot *player = res.getActiveHotspot(PLAYER_ID);
fields.setField(CHARACTER_HOTSPOT_ID, PLAYER_ID);
fields.setField(ACTIVE_HOTSPOT_ID, hs->hotspotId);
@@ -368,11 +390,16 @@
Screen::getReference().update();
player->doAction(LOOK_AT, hs);
res.setCurrentAction(NONE);
+ } else if (room.destRoomNumber() != 0) {
+ // Walk to another room
+ RoomExitCoordinateData &exitData =
+ res.coordinateList().getEntry(room.roomNumber()).getData(room.destRoomNumber());
+
+ player->walkTo((exitData.x & 0xfff8) | 5, (exitData.y & 0xfff8),
+ room.hotspotId() == 0 ? 0xffff : room.hotspotId());
} else {
- // Walk to mouse click. TODO: still need to recognise other actions,
- // such as to room exits or closing an on-screen floating dialog
- Hotspot *hs = res.getActiveHotspot(PLAYER_ID);
- hs->walkTo(mouse.x(), mouse.y(), 0);
+ // Walking within room
+ player->walkTo(mouse.x(), mouse.y(), 0);
}
}
Modified: scummvm/trunk/engines/lure/game.h
===================================================================
--- scummvm/trunk/engines/lure/game.h 2006-04-11 10:46:36 UTC (rev 21781)
+++ scummvm/trunk/engines/lure/game.h 2006-04-11 10:48:28 UTC (rev 21782)
@@ -43,6 +43,8 @@
void handleClick();
void handleRightClickMenu();
void handleLeftClick();
+
+ void playerChangeRoom();
public:
Game();
static Game &getReference();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the Scummvm-git-logs
mailing list