[Scummvm-cvs-logs] SF.net SVN: scummvm: [26680] scummvm/trunk/engines/lure
dreammaster at users.sourceforge.net
dreammaster at users.sourceforge.net
Mon Apr 30 09:56:46 CEST 2007
Revision: 26680
http://scummvm.svn.sourceforge.net/scummvm/?rev=26680&view=rev
Author: dreammaster
Date: 2007-04-30 00:56:45 -0700 (Mon, 30 Apr 2007)
Log Message:
-----------
Added NPC to NPC talk action, and a bugfix for when remote viewing a room
Modified Paths:
--------------
scummvm/trunk/engines/lure/hotspots.cpp
scummvm/trunk/engines/lure/hotspots.h
Modified: scummvm/trunk/engines/lure/hotspots.cpp
===================================================================
--- scummvm/trunk/engines/lure/hotspots.cpp 2007-04-29 18:26:27 UTC (rev 26679)
+++ scummvm/trunk/engines/lure/hotspots.cpp 2007-04-30 07:56:45 UTC (rev 26680)
@@ -1101,7 +1101,7 @@
&Hotspot::npcSetSupportOffset,
&Hotspot::npcSupportOffsetConditional,
&Hotspot::npcDispatchAction,
- &Hotspot::npcUnknown3,
+ &Hotspot::npcTalkNpcToNpc,
&Hotspot::npcPause,
&Hotspot::npcStartTalking,
&Hotspot::npcJumpAddress};
@@ -1903,8 +1903,38 @@
}
}
-void Hotspot::npcUnknown3(HotspotData *hotspot) {
- warning("npcUnknown3: Not yet implemented");
+void Hotspot::npcTalkNpcToNpc(HotspotData *hotspot) {
+ Resources &res = Resources::getReference();
+ ValueTableData &fields = res.fieldList();
+ CharacterScheduleEntry &entry = _currentActions.top().supportData();
+ fields.setField(ACTIVE_HOTSPOT_ID, hotspot->hotspotId);
+ fields.setField(USE_HOTSPOT_ID, hotspot->hotspotId);
+
+ HotspotPrecheckResult result = actionPrecheck(hotspot);
+ if (result == PC_WAIT) return;
+ else if (result != PC_EXECUTE) {
+ endAction();
+ return;
+ }
+
+ // If dest is already talking, keep exiting until they're free
+ if (hotspot->talkCountdown != 0)
+ return;
+
+ // Handle the source's talk message
+ if (entry.param(1) != 0) {
+ converse(hotspot->hotspotId, entry.param(1));
+ resource()->talkCountdown = entry.param(2);
+ resource()->delayCtr = entry.param(2);
+ }
+
+ // Handle the destination's response message
+ if (entry.param(3) != 0) {
+ Hotspot *destHotspot = res.getActiveHotspot(hotspot->hotspotId);
+ assert(destHotspot);
+ destHotspot->converse(this->hotspotId(), entry.param(3));
+ }
+
endAction();
}
@@ -2075,6 +2105,7 @@
HandlerMethodPtr HotspotTickHandlers::getHandler(uint16 procOffset) {
switch (procOffset) {
+ case 0:
case 0x41BD:
return defaultHandler;
case STANDARD_CHARACTER_TICK_PROC:
Modified: scummvm/trunk/engines/lure/hotspots.h
===================================================================
--- scummvm/trunk/engines/lure/hotspots.h 2007-04-29 18:26:27 UTC (rev 26679)
+++ scummvm/trunk/engines/lure/hotspots.h 2007-04-30 07:56:45 UTC (rev 26680)
@@ -316,7 +316,7 @@
void npcSetSupportOffset(HotspotData *hotspot);
void npcSupportOffsetConditional(HotspotData *hotspot);
void npcDispatchAction(HotspotData *hotspot);
- void npcUnknown3(HotspotData *hotspot);
+ void npcTalkNpcToNpc(HotspotData *hotspot);
void npcPause(HotspotData *hotspot);
void npcStartTalking(HotspotData *hotspot);
void npcJumpAddress(HotspotData *hotspot);
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