[Scummvm-cvs-logs] SF.net SVN: scummvm: [26487] scummvm/trunk/engines/lure
dreammaster at users.sourceforge.net
dreammaster at users.sourceforge.net
Sun Apr 15 12:50:00 CEST 2007
Revision: 26487
http://scummvm.svn.sourceforge.net/scummvm/?rev=26487&view=rev
Author: dreammaster
Date: 2007-04-15 03:49:59 -0700 (Sun, 15 Apr 2007)
Log Message:
-----------
Bugfix to have Ratpouch correctly follow player, and new object animation handlers added
Modified Paths:
--------------
scummvm/trunk/engines/lure/hotspots.cpp
scummvm/trunk/engines/lure/hotspots.h
scummvm/trunk/engines/lure/res_struct.cpp
scummvm/trunk/engines/lure/res_struct.h
Modified: scummvm/trunk/engines/lure/hotspots.cpp
===================================================================
--- scummvm/trunk/engines/lure/hotspots.cpp 2007-04-15 10:44:37 UTC (rev 26486)
+++ scummvm/trunk/engines/lure/hotspots.cpp 2007-04-15 10:49:59 UTC (rev 26487)
@@ -64,7 +64,6 @@
_layer = res->layer;
_sequenceOffset = res->sequenceOffset;
_tickCtr = res->tickTimeout;
- _actions = res->actions;
_colourOffset = res->colourOffset;
_override = resources.getHotspotOverride(res->hotspotId);
@@ -2006,7 +2005,6 @@
stream->writeByte(_layer);
stream->writeUint16LE(_sequenceOffset);
stream->writeUint16LE(_tickCtr);
- stream->writeUint32LE(_actions);
stream->writeByte(_colourOffset);
stream->writeUint16LE(_animId);
stream->writeUint16LE(_frameNumber);
@@ -2042,7 +2040,6 @@
_layer = stream->readByte();
_sequenceOffset = stream->readUint16LE();
_tickCtr = stream->readUint16LE();
- _actions = stream->readUint32LE();
_colourOffset = stream->readByte();
setAnimation(stream->readUint16LE());
setFrameNumber(stream->readUint16LE());
@@ -2062,6 +2059,8 @@
HandlerMethodPtr HotspotTickHandlers::getHandler(uint16 procOffset) {
switch (procOffset) {
+ case 0x41BD:
+ return defaultHandler;
case STANDARD_CHARACTER_TICK_PROC:
return standardCharacterAnimHandler;
case VOICE_TICK_PROC_ID:
@@ -2080,12 +2079,16 @@
return standardAnimHandler2;
case 0x7F3A:
return standardAnimHandler;
+ case 0x7F54:
+ return sonicRatAnimHandler;
case 0x7F69:
return droppingTorchAnimHandler;
case 0x7FA1:
return playerSewerExitAnimHandler;
case 0x8009:
return fireAnimHandler;
+ case 0x813F:
+ return teaAnimHandler;
case 0x8180:
return goewinCaptiveAnimHandler;
case 0x81B3:
@@ -2100,12 +2103,18 @@
return barmanAnimHandler;
case 0x85ce:
return skorlGaurdAnimHandler;
+ case 0x862D:
+ return gargoyleAnimHandler;
+ case 0x86FA:
+ case 0x86FF:
+ return skullAnimHandler;
case 0x882A:
return rackSerfAnimHandler;
case TALK_TICK_PROC_ID:
return talkAnimHandler;
default:
- return defaultHandler;
+ error("Unknown tick proc %xh for hotspot", procOffset);
+// return defaultHandler;
}
}
@@ -2681,11 +2690,10 @@
// The character is currently moving
h.setOccupied(false);
- if ((h.destHotspotId() != 0) && (h.destHotspotId() != 0xffff)) {
- // Player is walking to a room exit hotspot
+ if (h.destHotspotId() != 0) {
RoomExitJoinData *joinRec = res.getExitJoin(h.destHotspotId());
- if (joinRec->blocked) {
- // Exit now blocked, so stop walking
+ if ((joinRec != NULL) && (joinRec->blocked)) {
+ // Player is walking to a blocked room exit, so stop walking
actions.pop();
h.setOccupied(true);
break;
@@ -2757,18 +2765,6 @@
return;
}
- if (fields.wanderingCharsLoaded()) {
- // Start Ratpouch to sewer exit to meet player
- fields.wanderingCharsLoaded() = false;
- h.setBlockedFlag(false);
- CharacterScheduleEntry *newEntry = res.charSchedules().getEntry(RETURN_SUPPORT_ID);
- h.currentActions().addFront(DISPATCH_ACTION, newEntry, 7);
- h.setActionCtr(0);
-
- standardCharacterAnimHandler(h);
- return;
- }
-
// Handle any pause countdown
if (countdownCtr > 0) {
--countdownCtr;
@@ -2841,6 +2837,16 @@
standardCharacterAnimHandler(h);
}
+void HotspotTickHandlers::sonicRatAnimHandler(Hotspot &h) {
+ if (h.actionCtr() == 0) {
+ HotspotData *player = Resources::getReference().getHotspot(PLAYER_ID);
+ if (Support::charactersIntersecting(h.resource(), player))
+ h.setActionCtr(1);
+ } else {
+ standardAnimHandler(h);
+ }
+}
+
void HotspotTickHandlers::droppingTorchAnimHandler(Hotspot &h) {
if (h.frameCtr() > 0)
h.setFrameCtr(h.frameCtr() - 1);
@@ -2886,6 +2892,10 @@
ratpouchHotspot->setCharacterMode(CHARMODE_NONE);
ratpouchHotspot->setDelayCtr(0);
ratpouchHotspot->setActions(0x821C00);
+
+ // Ratpouch has previously been moved to room 8. Start him moving to room 7
+ ratpouchHotspot->currentActions().clear();
+ ratpouchHotspot->currentActions().addFront(DISPATCH_ACTION, 7);
}
}
@@ -2894,6 +2904,19 @@
h.setOccupied(true);
}
+void HotspotTickHandlers::teaAnimHandler(Hotspot &h) {
+ if (h.frameCtr() > 0) {
+ h.decrFrameCtr();
+ return;
+ }
+
+ if (h.executeScript()) {
+ // Signal that the tea is done
+ h.setScript(0xB82);
+ Resources::getReference().fieldList().setField(27, 1);
+ }
+}
+
void HotspotTickHandlers::goewinCaptiveAnimHandler(Hotspot &h) {
if (h.actionCtr() > 0) {
if (h.executeScript()) {
@@ -3400,6 +3423,18 @@
h.setFrameNumber(h.actionCtr());
}
+void HotspotTickHandlers::gargoyleAnimHandler(Hotspot &h) {
+ h.handleTalkDialog();
+}
+
+void HotspotTickHandlers::skullAnimHandler(Hotspot &h) {
+ Resources &res = Resources::getReference();
+ RoomExitJoinData *joinRec = res.getExitJoin(
+ (h.hotspotId() == 0x42f) ? 0x272A : 0x272C);
+
+ h.setFrameNumber(joinRec->blocked ? 0 : 1);
+}
+
void HotspotTickHandlers::rackSerfAnimHandler(Hotspot &h) {
Resources &res = Resources::getReference();
Modified: scummvm/trunk/engines/lure/hotspots.h
===================================================================
--- scummvm/trunk/engines/lure/hotspots.h 2007-04-15 10:44:37 UTC (rev 26486)
+++ scummvm/trunk/engines/lure/hotspots.h 2007-04-15 10:49:59 UTC (rev 26487)
@@ -65,9 +65,11 @@
static void playerAnimHandler(Hotspot &h);
static void followerAnimHandler(Hotspot &h);
static void skorlAnimHandler(Hotspot &h);
+ static void sonicRatAnimHandler(Hotspot &h);
static void droppingTorchAnimHandler(Hotspot &h);
static void playerSewerExitAnimHandler(Hotspot &h);
static void fireAnimHandler(Hotspot &h);
+ static void teaAnimHandler(Hotspot &h);
static void goewinCaptiveAnimHandler(Hotspot &h);
static void prisonerAnimHandler(Hotspot &h);
static void catrionaAnimHandler(Hotspot &h);
@@ -76,6 +78,8 @@
static void headAnimHandler(Hotspot &h);
static void barmanAnimHandler(Hotspot &h);
static void skorlGaurdAnimHandler(Hotspot &h);
+ static void gargoyleAnimHandler(Hotspot &h);
+ static void skullAnimHandler(Hotspot &h);
static void rackSerfAnimHandler(Hotspot &h);
public:
@@ -246,7 +250,6 @@
uint8 _layer;
uint16 _sequenceOffset;
uint16 _tickCtr;
- uint32 _actions;
uint8 _colourOffset;
bool _persistant;
HotspotOverrideData *_override;
@@ -410,7 +413,10 @@
_layer = newLayer;
_data->layer = newLayer;
}
- void setActions(uint32 newActions) { _actions = newActions; }
+ void setActions(uint32 newActions) {
+ assert(_data);
+ _data->actions = newActions;
+ }
void setCharRectY(uint16 value) { _charRectY = value; }
void setSkipFlag(bool value) { _skipFlag = value; }
CharacterMode characterMode() {
Modified: scummvm/trunk/engines/lure/res_struct.cpp
===================================================================
--- scummvm/trunk/engines/lure/res_struct.cpp 2007-04-15 10:44:37 UTC (rev 26486)
+++ scummvm/trunk/engines/lure/res_struct.cpp 2007-04-15 10:49:59 UTC (rev 26487)
@@ -1079,7 +1079,6 @@
_playerPendingPos.isSet = false;
_flags = GAMEFLAG_4 | GAMEFLAG_1;
_hdrFlagMask = 1;
- _wanderingCharsLoaded = false;
for (uint16 index = 0; index < NUM_VALUE_FIELDS; ++index)
_fieldList[index] = 0;
@@ -1126,7 +1125,6 @@
stream->writeSint16LE(_playerPendingPos.pos.y);
stream->writeByte(_flags);
stream->writeByte(_hdrFlagMask);
- stream->writeByte(_wanderingCharsLoaded);
// Write out the special fields
for (int index = 0; index < NUM_VALUE_FIELDS; ++index)
@@ -1145,7 +1143,6 @@
_playerPendingPos.pos.y = stream->readSint16LE();
_flags = stream->readByte();
_hdrFlagMask = stream->readByte();
- _wanderingCharsLoaded = stream->readByte() != 0;
// Read in the field list
for (int index = 0; index < NUM_VALUE_FIELDS; ++index)
Modified: scummvm/trunk/engines/lure/res_struct.h
===================================================================
--- scummvm/trunk/engines/lure/res_struct.h 2007-04-15 10:44:37 UTC (rev 26486)
+++ scummvm/trunk/engines/lure/res_struct.h 2007-04-15 10:49:59 UTC (rev 26487)
@@ -796,7 +796,6 @@
PlayerPendingPosition _playerPendingPos;
uint8 _flags;
uint8 _hdrFlagMask;
- bool _wanderingCharsLoaded;
uint16 _fieldList[NUM_VALUE_FIELDS];
bool isKnownField(uint16 fieldIndex);
@@ -814,7 +813,6 @@
uint8 &hdrFlagMask() { return _hdrFlagMask; }
PlayerNewPosition &playerNewPos() { return _playerNewPos; }
PlayerPendingPosition &playerPendingPos() { return _playerPendingPos; }
- bool &wanderingCharsLoaded() { return _wanderingCharsLoaded; }
void saveToStream(Common::WriteStream *stream);
void loadFromStream(Common::ReadStream *stream);
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