[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