[Scummvm-cvs-logs] SF.net SVN: scummvm: [28154] scummex/branches/gsoc2007-gameresbrowser

zbychs at users.sourceforge.net zbychs at users.sourceforge.net
Sat Jul 21 01:32:40 CEST 2007


Revision: 28154
          http://scummvm.svn.sourceforge.net/scummvm/?rev=28154&view=rev
Author:   zbychs
Date:     2007-07-20 16:32:39 -0700 (Fri, 20 Jul 2007)

Log Message:
-----------
Improvements in presenting OBCD, CDHD, OBIM and IMHD blocks.

Modified Paths:
--------------
    scummex/branches/gsoc2007-gameresbrowser/src/ReadMe.txt
    scummex/branches/gsoc2007-gameresbrowser/src/browserapp/DefaultPlugin.cpp
    scummex/branches/gsoc2007-gameresbrowser/src/plugins/basic/CHexEditCtrl.cpp
    scummex/branches/gsoc2007-gameresbrowser/src/plugins/basic/CHexEditCtrl.h
    scummex/branches/gsoc2007-gameresbrowser/src/plugins/basic/ImageBox.cpp
    scummex/branches/gsoc2007-gameresbrowser/src/plugins/basic/ImageBox.h
    scummex/branches/gsoc2007-gameresbrowser/src/plugins/scumm/CustomScummBlocks.h
    scummex/branches/gsoc2007-gameresbrowser/src/plugins/scumm/CustomScummBlocks.inl
    scummex/branches/gsoc2007-gameresbrowser/src/plugins/scumm/ScummBlockFactory.cpp
    scummex/branches/gsoc2007-gameresbrowser/src/plugins/scumm/ScummCommonPresenters.cpp
    scummex/branches/gsoc2007-gameresbrowser/src/plugins/scumm/ScummFileTypes.cpp
    scummex/branches/gsoc2007-gameresbrowser/src/plugins/scumm/ScummFileTypes.h
    scummex/branches/gsoc2007-gameresbrowser/src/plugins/scumm/ScummSpecificPresenters.cpp
    scummex/branches/gsoc2007-gameresbrowser/src/plugins/scumm/ScummSpecificPresenters.h
    scummex/branches/gsoc2007-gameresbrowser/vc8/basic_plugin/basic_plugin.vcproj
    scummex/branches/gsoc2007-gameresbrowser/wxdev/Browser.layout

Modified: scummex/branches/gsoc2007-gameresbrowser/src/ReadMe.txt
===================================================================
--- scummex/branches/gsoc2007-gameresbrowser/src/ReadMe.txt	2007-07-20 21:51:08 UTC (rev 28153)
+++ scummex/branches/gsoc2007-gameresbrowser/src/ReadMe.txt	2007-07-20 23:32:39 UTC (rev 28154)
@@ -22,5 +22,11 @@
     pinslot_plugins.cpp - shows plugin/object chain usage
     myplugin.h          - shows plugins in a verbose way
     pinslot_verbose.cpp - shows pins and slots in a verbose way
+    
 
+Notes:
+    http://wxcode.sourceforge.net/complist.php
+    wxAudio, wxMemoryMappedFile,
+    RtAudio, PortAudio
+
 /////////////////////////////////////////////////////////////////////////////

Modified: scummex/branches/gsoc2007-gameresbrowser/src/browserapp/DefaultPlugin.cpp
===================================================================
--- scummex/branches/gsoc2007-gameresbrowser/src/browserapp/DefaultPlugin.cpp	2007-07-20 21:51:08 UTC (rev 28153)
+++ scummex/branches/gsoc2007-gameresbrowser/src/browserapp/DefaultPlugin.cpp	2007-07-20 23:32:39 UTC (rev 28154)
@@ -90,6 +90,8 @@
 	PLUGGED_OBJECT(ScummLOFFBlockPresenter)	
 	PLUGGED_OBJECT(ScummOFFSBlockPresenter)	
 	PLUGGED_OBJECT(ScummRMHDBlockPresenter)	
+	PLUGGED_OBJECT(ScummIMHDBlockPresenter)	
+	PLUGGED_OBJECT(ScummCDHDBlockPresenter)	
 	PLUGGED_OBJECT(ScummTRNSBlockPresenter)	
 	PLUGGED_OBJECT(ScummNLSCBlockPresenter)	
 

Modified: scummex/branches/gsoc2007-gameresbrowser/src/plugins/basic/CHexEditCtrl.cpp
===================================================================
--- scummex/branches/gsoc2007-gameresbrowser/src/plugins/basic/CHexEditCtrl.cpp	2007-07-20 21:51:08 UTC (rev 28153)
+++ scummex/branches/gsoc2007-gameresbrowser/src/plugins/basic/CHexEditCtrl.cpp	2007-07-20 23:32:39 UTC (rev 28154)
@@ -112,8 +112,17 @@
 
 	//m_font = wxSystemSettings::GetFont(wxSYS_OEM_FIXED_FONT);
 	m_font.Create(m_fontHeight, wxFONTFAMILY_MODERN, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL);
-	m_myForegroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT);
-	m_myBackgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW);
+	//m_myForegroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT);
+	//m_myBackgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW);
+	//m_mySelectionColour = wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHT);
+	//m_mySelectionTextColour = wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT);
+	m_myForegroundColour = *wxBLACK;
+	m_myBackgroundColour = *wxWHITE;
+	m_myBackgroundColourOdd.Set(237, 243, 254);
+	m_mySelectionColour.Set(255, 210, 129);
+	m_mySelectionTextColour = m_myForegroundColour;
+	m_myOffsetColour = wxTheColourDatabase->Find(wxT("GRAY"));
+	m_myCurentColour = wxTheColourDatabase->Find(wxT("YELLOW"));
 
 	//FIXME: dunno if this is required
 	wxCaret* caret = new wxCaret(this, 10, 10);
@@ -159,6 +168,25 @@
 
 /////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////
+// Calculations
+
+// address does not include m_dwStartAddr, doesn't have to be aligned to (m_digitsInData/2)
+int CHexEditCtrl::getRowFromAddress(wxUint32 address) {
+	return address / (m_columns * (m_digitsInData/2));
+}
+
+// address does not include m_dwStartAddr, doesn't have to be aligned to (m_digitsInData/2)
+int CHexEditCtrl::getColFromAddress(wxUint32 address) {
+	return (address / (m_digitsInData/2)) % m_columns;
+}
+
+// return address aligned to (m_digitsInData/2)
+wxUint32 CHexEditCtrl::getAddress(int row, int col) {
+	return (row * m_columns + col) * (m_digitsInData/2);
+}
+
+/////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////
 // Painting
 
 void CHexEditCtrl::TextOutWithCheck(wxDC& dc, const wxRect& rcInvalid, int x, int y, const wxString& strText) {
@@ -218,25 +246,36 @@
 			else
 				strText.Printf(wxT("%*c  "), m_digitsInAddress, wxT(' '));
 
-			dc.SetTextForeground(wxTheColourDatabase->Find(wxT("GRAY")));
+			dc.SetTextForeground(m_myOffsetColour);
 			dc.SetTextBackground(m_myBackgroundColour);
 			TextOutWithCheck(dc, rcInvalid, - m_nHorzScroll * m_cellSize.GetWidth() + m_cellSize.GetWidth()/2,
 				i * m_cellSize.GetHeight(), strText);
 		}
 
+		int dwRowPos = i * m_columns + m_viewPos;
+		bool full_line = wxUint32((dwRowPos + m_columns) * (m_digitsInData / 2) - 1) <
+			m_data.size();
+		bool partial_line = wxUint32(dwRowPos * (m_digitsInData / 2)) <
+			m_data.size();
+
+		wxColour curBackground;
 		for (int j = 0; j < m_columns; j++) {
 			// draw hex data
 
-			int dwPos = j + i * m_columns + m_viewPos;
+			int dwPos = j + dwRowPos;
+			bool pos_ok = wxUint32(dwPos * (m_digitsInData / 2)) < m_data.size();
 
+			curBackground = (getRowFromAddress(dwPos) & 1) ? m_myBackgroundColourOdd
+															: m_myBackgroundColour;
+
 			//draw a space after hex number
 			if ( dwPos >= m_selStart && dwPos < m_selEnd && j != (m_columns-1)) {
 				// selected text colors
-				dc.SetTextBackground(wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHT));
-				dc.SetTextForeground(wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT));
+				dc.SetTextBackground(m_mySelectionColour);
+				dc.SetTextForeground(m_mySelectionTextColour);
 			} else {
 				// normal text colors
-				dc.SetTextBackground(m_myBackgroundColour);
+				dc.SetTextBackground(curBackground);
 				dc.SetTextForeground(m_myForegroundColour);
 			}
 			TextOutWithCheck(dc, rcInvalid,
@@ -245,15 +284,15 @@
 
 			if (dwPos == m_editPos) {
 				// caret text colors
-				dc.SetTextBackground(wxTheColourDatabase->Find(wxT("YELLOW")));
+				dc.SetTextBackground(m_myCurentColour);
 				dc.SetTextForeground(m_myForegroundColour);
 			} else if (dwPos >= m_selStart && dwPos <= m_selEnd) {
 				// selected text colors
-				dc.SetTextBackground(wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHT));
-				dc.SetTextForeground(wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT));
+				dc.SetTextBackground(m_mySelectionColour);
+				dc.SetTextForeground(m_mySelectionTextColour);
 			}
 
-			if (wxUint32(dwPos) < m_data.size() / (m_digitsInData / 2)) {
+			if (pos_ok) {
 				std::vector<wxByte>::pointer ptr;
 				// we are in the data
 				switch (m_digitsInData)
@@ -301,7 +340,7 @@
 			} else {
 				// if the last line has less than m_columns numbers, fill it with spaces
 				dc.SetTextForeground(m_myForegroundColour);
-				dc.SetTextBackground(m_myBackgroundColour);
+				dc.SetTextBackground(partial_line ? curBackground : m_myBackgroundColour);
 				strText.Printf(wxT("%*c "), m_digitsInData, wxT(' '));
 				TextOutWithCheck(dc, rcInvalid,
 					(m_addrMargin + j * (m_digitsInData + 1) - m_nHorzScroll) * m_cellSize.GetWidth() + m_cellSize.GetWidth() / 2,
@@ -318,7 +357,7 @@
 				}
 			}
 
-			if (m_digitsInData < 8 && j > 0 && j * (m_digitsInData/2) % 4 == 0) {
+			if (partial_line && m_digitsInData < 8 && j > 0 && j * (m_digitsInData/2) % 4 == 0) {
 				int x = (m_addrMargin + j * (m_digitsInData + 1) - m_nHorzScroll) * m_cellSize.GetWidth();
 				int y = i * m_cellSize.GetHeight();
 				dc.DrawLine(x, y, x, y + m_cellSize.GetHeight());
@@ -326,7 +365,7 @@
 		}
 
 		dc.SetTextForeground(m_myForegroundColour);
-		dc.SetTextBackground(m_myBackgroundColour);
+		dc.SetTextBackground(partial_line ? curBackground : m_myBackgroundColour);
 
 		//if ( m_bRealShowAscii )
 		{
@@ -337,6 +376,8 @@
 				i * m_cellSize.GetHeight(), strText);
 		}		
 
+		dc.SetTextBackground(m_myBackgroundColour);
+
 		// draw extra spaces at the end of line
 		if (m_charCountView.GetWidth() < m_charCountWindow.GetWidth())
 			strText.Printf(wxT("%*c  "), m_charCountWindow.GetWidth() - m_charCountView.GetWidth() + 1, wxT(' '));
@@ -349,9 +390,9 @@
 	}
 
 	// fill the rest of the window with spaces
-	strText.Printf(wxT("%*c "), m_charCountWindow.GetWidth(), wxT(' '));
+	/*strText.Printf(wxT("%*c "), m_charCountWindow.GetWidth(), wxT(' '));
 	TextOutWithCheck(dc, rcInvalid,
-		m_cellSize.GetWidth() / 2, m_charCountWindow.GetHeight() * m_cellSize.GetHeight(), strText);
+		m_cellSize.GetWidth() / 2, m_charCountWindow.GetHeight() * m_cellSize.GetHeight(), strText);*/
 }
 
 /////////////////////////////////////////////////////////////////////////////

Modified: scummex/branches/gsoc2007-gameresbrowser/src/plugins/basic/CHexEditCtrl.h
===================================================================
--- scummex/branches/gsoc2007-gameresbrowser/src/plugins/basic/CHexEditCtrl.h	2007-07-20 21:51:08 UTC (rev 28153)
+++ scummex/branches/gsoc2007-gameresbrowser/src/plugins/basic/CHexEditCtrl.h	2007-07-20 23:32:39 UTC (rev 28154)
@@ -190,6 +190,11 @@
 	bool m_hScrollShown;
 	wxColour m_myForegroundColour; //CAUTION: wxWindowBase has m_foregroundColour member
 	wxColour m_myBackgroundColour; //CAUTION: wxWindowBase has m_backgroundColour member
+	wxColour m_myBackgroundColourOdd; //use it for odd columns
+	wxColour m_mySelectionColour;
+	wxColour m_mySelectionTextColour;
+	wxColour m_myOffsetColour;
+	wxColour m_myCurentColour;
 	wxFont m_font;
 
 	bool m_readOnly;
@@ -233,6 +238,10 @@
 	void ShowCaret();
 	void HideCaret();
 
+	int getRowFromAddress(wxUint32 address);
+	int getColFromAddress(wxUint32 address);
+	wxUint32 getAddress(int row, int col);
+
 	/*! This function calls pdc->TextOut ( x, y, strText ) function if text overlaps with rcInvalid.*/
 	void TextOutWithCheck(wxDC& dc, const wxRect& rcInvalid, int x, int y, const wxString& strText);
 

Modified: scummex/branches/gsoc2007-gameresbrowser/src/plugins/basic/ImageBox.cpp
===================================================================
--- scummex/branches/gsoc2007-gameresbrowser/src/plugins/basic/ImageBox.cpp	2007-07-20 21:51:08 UTC (rev 28153)
+++ scummex/branches/gsoc2007-gameresbrowser/src/plugins/basic/ImageBox.cpp	2007-07-20 23:32:39 UTC (rev 28154)
@@ -19,6 +19,7 @@
 ////////////////////////////////////////////////////////////
 
 BEGIN_EVENT_TABLE(wxImageBox, wxPaintBox)
+  EVT_PAINT(wxImageBox::OnPaint)
   EVT_SIZE(wxImageBox::OnResize)
   EVT_RIGHT_DOWN(wxImageBox::OnMouseRightButton)
   EVT_RIGHT_UP(wxImageBox::OnMouseRightButton)
@@ -201,12 +202,14 @@
     // paintRect.x, paintRect.y, paintRect.width, paintRect.height,
     // bufferRect.x, bufferRect.y, bufferRect.width, bufferRect.height);
   }
+
   wxPaintBox::OnPaint(event);
 }
 
 void wxImageBox::OnResize(wxSizeEvent &event)
 {
   UpdatePaintBox();
+  event.Skip();
 }
 
 void wxImageBox::OnMouseRightButton(wxMouseEvent &event)
@@ -231,7 +234,8 @@
   m_buffer = new wxBitmap;
   m_bufferX = m_bufferY = 0;
   m_imageWidth = m_imageHeight = 0;
-  SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_BACKGROUND));
+
+  SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE));
 }
 
 wxPaintBox::~wxPaintBox() {
@@ -250,7 +254,7 @@
   //dc.BeginDrawing();
   dc.DrawBitmap(*m_buffer, m_bufferX, m_bufferY);
   //background
-  dc.SetPen(wxPen(*wxBLACK,0,wxTRANSPARENT));
+  dc.SetPen(*wxTRANSPARENT_PEN);
   dc.SetBrush(wxBrush(GetBackgroundColour(), wxSOLID));
   int w = wxMax(GetClientSize().GetWidth(), m_imageWidth);
   int h = wxMax(GetClientSize().GetHeight(), m_imageHeight);

Modified: scummex/branches/gsoc2007-gameresbrowser/src/plugins/basic/ImageBox.h
===================================================================
--- scummex/branches/gsoc2007-gameresbrowser/src/plugins/basic/ImageBox.h	2007-07-20 21:51:08 UTC (rev 28153)
+++ scummex/branches/gsoc2007-gameresbrowser/src/plugins/basic/ImageBox.h	2007-07-20 23:32:39 UTC (rev 28154)
@@ -28,7 +28,7 @@
     wxBitmap *m_buffer;
     int m_bufferX, m_bufferY;
     int m_imageWidth, m_imageHeight;
-    virtual void OnPaint(wxPaintEvent &event);
+    void OnPaint(wxPaintEvent &event);
     void OnEraseBackground(wxEraseEvent &event);
     DECLARE_EVENT_TABLE()
 };

Modified: scummex/branches/gsoc2007-gameresbrowser/src/plugins/scumm/CustomScummBlocks.h
===================================================================
--- scummex/branches/gsoc2007-gameresbrowser/src/plugins/scumm/CustomScummBlocks.h	2007-07-20 21:51:08 UTC (rev 28153)
+++ scummex/branches/gsoc2007-gameresbrowser/src/plugins/scumm/CustomScummBlocks.h	2007-07-20 23:32:39 UTC (rev 28154)
@@ -12,9 +12,22 @@
 
 namespace Scumm {
 
+/////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////
+//
 // This file holds interfaces of ScummBlocks that can parse particular
-// scumm chunks. See CustomScummBlocks.inl
+// scumm chunks. See CustomScummBlocks.inl for a list and comments.
+//
+/////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////
+// Accessor that parses() the chunk before returning the field's value.
 
+#define PARSING_ACCESSOR(type, accessor, field) \
+	virtual type accessor() { \
+		parse(); \
+		return field; \
+	}
+
 /////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////
 // A ScummBlock that consists of one null-terminated string.
@@ -25,7 +38,7 @@
 	wxString _string;
 public:
 	ScummStringBlock(ScummTag* tag, uint32 size, Common::SeekableReadStream* stream);
-	virtual const wxString& getString();
+	PARSING_ACCESSOR(const wxString&, getString, _string)
 	virtual bool readData();
 };
 
@@ -44,7 +57,7 @@
 	std::vector<LOFFEntry> _offsets;
 public:
 	ScummLOFFBlock(ScummTag* tag, uint32 size, Common::SeekableReadStream* stream);
-	virtual const std::vector<LOFFEntry>& getOffsets();
+	PARSING_ACCESSOR(const std::vector<LOFFEntry>&, getOffsets, _offsets)
 	virtual int getRoomNumberByOffset(uint32 offset); //-1 if not found
 	virtual bool readData();
 };
@@ -66,7 +79,115 @@
 
 /////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////
+// A ScummBlock that is able to parse RMHD chunk.
+// It exposes the determined width and height of the room's image.
 
+class ScummRMHDBlock : public ScummWidthHeightBlock {
+	uint32 _objs;
+public:
+	ScummRMHDBlock(ScummTag* tag, uint32 size, Common::SeekableReadStream* stream);
+	PARSING_ACCESSOR(uint32, getNumObjs, _objs)
+	virtual bool readData();
+};
+
+/////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////
+// A ScummBlock that is able to parse IMHD chunk.
+// It exposes the determined width and height of the image.
+
+class ScummIMHDBlock : public ScummWidthHeightBlock {
+public:
+	struct HotSpot {
+		int16 _x;
+		int16 _y;
+	};
+protected:
+	int16 _objId;
+	int16 _numIMs;
+	int16 _numZPsPerIM;
+	int16 _unk;
+	int16 _x;
+	int16 _y;
+	//int16 _width; inherited
+	//int16 _height; inherited
+	int16 _numHotspots;
+	std::vector<HotSpot> _hotspots;
+
+	//uint32 _numFiles;
+public:
+	ScummIMHDBlock(ScummTag* tag, uint32 size, Common::SeekableReadStream* stream);
+
+	PARSING_ACCESSOR(int16, getObjId, _objId)
+	PARSING_ACCESSOR(int16, getNumIMs, _numIMs)
+	PARSING_ACCESSOR(int16, getZPsPerIM, _numZPsPerIM)
+	PARSING_ACCESSOR(int16, getUnk, _unk)
+	PARSING_ACCESSOR(int16, getX, _x)
+	PARSING_ACCESSOR(int16, getY, _y)
+	PARSING_ACCESSOR(int16, getNumHotSpots, _numHotspots)
+	//_width, _height - inherited
+	PARSING_ACCESSOR(const std::vector<HotSpot>&, getHotSpots, _hotspots)
+
+	virtual bool readData();
+};
+
+/////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////
+// A ScummBlock that is able to parse CDHD chunk.
+// It exposes the determined width and height of the object.
+
+class ScummCDHDBlock : public ScummWidthHeightBlock {
+protected:
+	int16 _objId;
+	int16 _x;
+	int16 _y;
+	//int16 _width; inherited
+	//int16 _height; inherited
+	int8 _flagsField;
+	int8 _parentField;
+	int16 _unk0;
+	int16 _unk1;
+	int8 _actorDir;
+public:
+	ScummCDHDBlock(ScummTag* tag, uint32 size, Common::SeekableReadStream* stream);
+
+	PARSING_ACCESSOR(int16, getObjId, _objId)
+	PARSING_ACCESSOR(int16, getX, _x)
+	PARSING_ACCESSOR(int16, getY, _y)
+	//_width, _height - inherited
+	PARSING_ACCESSOR(int8, getFlagsField, _flagsField)
+	PARSING_ACCESSOR(int8, getParentField, _parentField)
+	PARSING_ACCESSOR(int16, getUnk0, _unk0)
+	PARSING_ACCESSOR(int16, getUnk1, _unk1)
+	PARSING_ACCESSOR(int8, getActorDir, _actorDir)
+
+	virtual bool readData();
+};
+
+/////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////
+// A ScummBlock that is able to parse VERB chunk.
+// It exposes the determined width and height of the object.
+
+class ScummVERBBlock : public ScummBlock {
+public:
+	struct VerbOffset {
+		int8 _verb;
+		int16 _offset;
+		int _size;
+	};
+protected:
+	std::vector<VerbOffset> _offsets;
+public:
+	ScummVERBBlock(ScummTag* tag, uint32 size, Common::SeekableReadStream* stream);
+
+	PARSING_ACCESSOR(const std::vector<VerbOffset>&, getVerbOffsets, _offsets)
+
+	virtual bool readData();
+};
+
+/////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////
+
 } // namespace Scumm
 
 } // namespace Browser

Modified: scummex/branches/gsoc2007-gameresbrowser/src/plugins/scumm/CustomScummBlocks.inl
===================================================================
--- scummex/branches/gsoc2007-gameresbrowser/src/plugins/scumm/CustomScummBlocks.inl	2007-07-20 21:51:08 UTC (rev 28153)
+++ scummex/branches/gsoc2007-gameresbrowser/src/plugins/scumm/CustomScummBlocks.inl	2007-07-20 23:32:39 UTC (rev 28154)
@@ -14,6 +14,8 @@
 // This file defines blocks specific for the following scumm chunks:
 //		RMHD
 //		IMHD
+//		CDHD
+//		VERB
 //		PAL's (various, plus dummy ScummEGABlock)
 //		OBNA
 //		LFLF
@@ -74,92 +76,162 @@
 // A ScummBlock that is able to parse RMHD chunk.
 // It exposes the determined width and height of the room's image.
 
-class ScummRMHDBlock : public ScummWidthHeightBlock {
-	uint32 _objs;
-public:
-	ScummRMHDBlock(ScummTag* tag, uint32 size, Common::SeekableReadStream* stream)
-		: ScummWidthHeightBlock(tag, size, stream) {
-		_flags = READ_DATA;
-	}
+ScummRMHDBlock::ScummRMHDBlock(ScummTag* tag, uint32 size, Common::SeekableReadStream* stream)
+	: ScummWidthHeightBlock(tag, size, stream) {
+	_flags = READ_DATA;
+}
 
-	virtual uint32 getNumObjs() {
-		parse();
-		return _objs;
-	}
+bool ScummRMHDBlock::readData() {
+	Common::SeekableReadStream& _input = *_mineStream;
+	_width = _input.readUint16LE();
+	_height = _input.readUint16LE();
+	_objs = _input.readUint16LE();
+	return true;
+}
 
-	virtual bool readData() {
-		Common::SeekableReadStream& _input = *_mineStream;
-		_width = _input.readUint16LE();
-		_height = _input.readUint16LE();
-		_objs = _input.readUint16LE();
-		return true;
-	}
-};
-
 /////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////
 // A ScummBlock that is able to parse IMHD chunk.
 // It exposes the determined width and height of the image.
 
-class ScummIMHDBlock : public ScummWidthHeightBlock {
-	uint32 _numFiles;
-public:
-	ScummIMHDBlock(ScummTag* tag, uint32 size, Common::SeekableReadStream* stream)
-		: ScummWidthHeightBlock(tag, size, stream) {
-		_flags = READ_DATA;
-	}
+ScummIMHDBlock::ScummIMHDBlock(ScummTag* tag, uint32 size, Common::SeekableReadStream* stream)
+	: ScummWidthHeightBlock(tag, size, stream) {
+	_flags = READ_DATA;
+}
 
-	virtual uint32 getNumFiles() {
-		parse();
-		return _numFiles;
+bool ScummIMHDBlock::readData() {
+	//this handles only the *** branch below
+	_objId = _mineStream->readSint16LE();
+	_numIMs = _mineStream->readSint16LE();
+	_numZPsPerIM = _mineStream->readSint16LE();
+	_unk = _mineStream->readSint16LE();
+	_x = _mineStream->readSint16LE();
+	_y = _mineStream->readSint16LE();
+	_width = _mineStream->readSint16LE();
+	_height = _mineStream->readSint16LE();
+	_numHotspots = _mineStream->readSint16LE();
+
+	HotSpot hotspot;
+	for (int i = 0; i < _numHotspots; ++i) {
+		hotspot._x = _mineStream->readSint16LE();
+		hotspot._y = _mineStream->readSint16LE();
+		_hotspots.push_back(hotspot);
 	}
 
-	virtual bool readData() {
-		Common::SeekableReadStream& _input = *_mineStream;
+	//FIXME: try and parse it properly
+	/* old code - not sure what some of it does:
+	Common::SeekableReadStream& _input = *_mineStream;
 
-		uint32 mark = _input.readUint32LE();
+	uint32 mark = _input.readUint32LE();
 
-		if (mark == 730) {
-			_input.readUint16LE();
-			_numFiles = _input.readUint16LE(); // Number of images
+	if (mark == 730) {
+		_input.readUint16LE();
+		_numFiles = _input.readUint16LE(); // Number of images
+		_input.readUint16LE(); // X Position
+		_input.readUint16LE(); // Y Position
+		_width = _input.readUint16LE();
+		_height = _input.readUint16LE();
+	} else {
+		bool read = false;
+
+		ScummBlock* im00 = this->getNext();
+		ScummBlock* bomp = im00 ? im00->getNext() : NULL;
+		if (bomp && bomp->getTag()->equals("BOMP")) { //FIXME: it shouldn't be a BOMP test, almost 100%
+			Common::SeekableReadStream& _bompinput = *bomp->_mineStream;
+			_bompinput.seek(0, SEEK_SET);
+			_bompinput.seek(8 + 2, SEEK_SET);
+			uint32 mark = _bompinput.readUint32LE();
+			if (mark == 801) {
+				_numFiles = _bompinput.readUint32LE(); // Number of images
+				_bompinput.readUint32LE(); // X Position
+				_bompinput.readUint32LE(); // Y Position
+				_width = _bompinput.readUint32LE();
+				_height = _bompinput.readUint32LE();
+				read = true;
+			} 
+		}
+		
+		if (!read) { //***
+			_input.seek(10, SEEK_SET);
+			_numFiles = _input.readUint16LE();
+			_input.readUint32BE(); // Number of Z-Buffers per Image + unk
 			_input.readUint16LE(); // X Position
 			_input.readUint16LE(); // Y Position
 			_width = _input.readUint16LE();
 			_height = _input.readUint16LE();
-		} else {
-			bool read = false;
+		}
+	}
+	*/
 
-			ScummBlock* im00 = this->getNext();
-			ScummBlock* bomp = im00 ? im00->getNext() : NULL;
-			if (bomp && bomp->getTag()->equals("BOMP")) { //FIXME: it shouldn't be a BOMP test, almost 100%
-				Common::SeekableReadStream& _bompinput = *bomp->_mineStream;
-				_bompinput.seek(0, SEEK_SET);
-				_bompinput.seek(8 + 2, SEEK_SET);
-				uint32 mark = _bompinput.readUint32LE();
-				if (mark == 801) {
-					_numFiles = _bompinput.readUint32LE(); // Number of images
-					_bompinput.readUint32LE(); // X Position
-					_bompinput.readUint32LE(); // Y Position
-					_width = _bompinput.readUint32LE();
-					_height = _bompinput.readUint32LE();
-					read = true;
-				} 
-			}
-			
-			if (!read) {
-				_input.seek(10, SEEK_SET);
-				_numFiles = _input.readUint16LE();
-				_input.readUint32BE(); // Number of Z-Buffers per Image
-				_input.readUint16LE(); // X Position
-				_input.readUint16LE(); // Y Position
-				_width = _input.readUint16LE();
-				_height = _input.readUint16LE();
-			}
+	return true;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////
+// A ScummBlock that is able to parse CDHD chunk.
+// It exposes the determined width and height of the object.
+
+ScummCDHDBlock::ScummCDHDBlock(ScummTag* tag, uint32 size, Common::SeekableReadStream* stream)
+	: ScummWidthHeightBlock(tag, size, stream) {
+	_flags = READ_DATA;
+}
+
+bool ScummCDHDBlock::readData() {
+	_objId = _mineStream->readSint16LE();
+	_x = _mineStream->readSint16LE();
+	_y = _mineStream->readSint16LE();
+	_width = _mineStream->readSint16LE();
+	_height = _mineStream->readSint16LE();
+	_flagsField = _mineStream->readSByte();
+	_parentField = _mineStream->readSByte();
+	_unk0 = _mineStream->readSint16LE();
+	_unk1 = _mineStream->readSint16LE();
+	_actorDir = _mineStream->readSByte();
+
+	return true;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////
+// A ScummBlock that is able to parse VERB chunk.
+// It exposes the determined width and height of the object.
+
+ScummVERBBlock::ScummVERBBlock(ScummTag* tag, uint32 size, Common::SeekableReadStream* stream)
+	: ScummBlock(tag, size, stream) {
+	_flags = READ_DATA;
+}
+
+bool ScummVERBBlock::readData() {
+	/*uint32 pos = _mineStream->pos();
+	bool res = ScummBlock::readData(); //read the chunk into _data
+	if (!res)
+		return false;
+
+	_mineStream->seek(pos, SEEK_SET);*/
+
+	VerbOffset offset;
+	int lastOffset;
+	while(true) {
+		if (_mineStream->ioFailed())
+			return false;
+
+		offset._verb = _mineStream->readSByte();
+		if (offset._verb == 0) {
+			if (!_offsets.empty())
+				_offsets.back()._size = _mineStream->size() - lastOffset;
+			break;
 		}
-		return true;
+
+		offset._offset = _mineStream->readUint16LE();
+		if (!_offsets.empty())
+			_offsets.back()._size = offset._offset - lastOffset;
+		lastOffset = offset._offset;
+		_offsets.push_back(offset);
 	}
-};
 
+	return true;
+}
+
 /////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////
 // A generic ScummBlocks that is able to parse palette chunks.
@@ -247,11 +319,6 @@
 	_flags = READ_DATA | PARSE_BEFORE_NAME;
 }
 
-const wxString& ScummStringBlock::getString() {
-	parse();
-	return _string;
-}
-
 bool ScummStringBlock::readData() {
 	_string = _mineStream->readString();
 	_friendlyName << wxT(": ") << _string;
@@ -269,7 +336,7 @@
 		: ScummStringBlock(tag, size, stream) {
 		_flags |= EAGER_PARSE;	//PARSE_BEFORE_NAME is not enough, cause we need to set name for OBCD, our parent
 	}
-	virtual bool readData() {
+	/*virtual bool readData() {
 		bool res = ScummStringBlock::readData();
 		if (!res)
 			return false;
@@ -282,7 +349,7 @@
 		obcdBlock->_friendlyName << wxT(": ") << _string;
 
 		return true;
-	}
+	}*/
 };
 
 /////////////////////////////////////////////////////////////////////////////
@@ -332,11 +399,6 @@
 	_flags = READ_DATA | EAGER_PARSE;
 }
 
-const std::vector<ScummLOFFBlock::LOFFEntry>& ScummLOFFBlock::getOffsets() {
-	parse();
-	return _offsets;
-}
-
 bool ScummLOFFBlock::readData() {
 	byte numLFLFs = _mineStream->readByte();
 
@@ -436,4 +498,69 @@
 
 /////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////
+// A ScummBlock that is able to parse OBCD chunk.
+// It takes it's friendly name from OBNA, and gives it to itself and corresponding OBIM.
 
+class ScummOBCDBlock : public ScummBlock {
+public:
+	ScummOBCDBlock(ScummTag* tag, uint32 size, Common::SeekableReadStream* stream)
+		: ScummBlock(tag, size, stream) {
+		_flags = PARSE_SUB_BLOCKS | EAGER_PARSE; //EAGER_PARSE to parse OBNA block and set _friendlyName
+	}
+
+	virtual bool parse() {
+		if (_parsed)
+			return true;
+		bool res = ScummBlock::parse();
+		if (!res)
+			return false;
+
+		ScummBlock* obnaBlock0 = this->findChild("OBNA");
+		if (!obnaBlock0)
+			return true;
+
+		ScummOBNABlock* obnaBlock = dynamic_cast<ScummOBNABlock*>(obnaBlock0);
+		ASSERT(obnaBlock);
+		_friendlyName << wxT(": ") << obnaBlock->getString();
+
+		ScummBlock* cdhdBlock0 = this->findChild("CDHD");
+		if (!cdhdBlock0)
+			return true;
+
+		ScummCDHDBlock* cdhdBlock = dynamic_cast<ScummCDHDBlock*>(cdhdBlock0);
+		ASSERT(cdhdBlock);
+
+		int objId = cdhdBlock->getObjId();
+
+		ScummBlock* block = this;
+		while (true) {
+			block = block->getPrevSibling();
+			if (!block)
+				break;
+			if (!block->getTag()->equals("OBIM"))
+				continue;
+
+			ScummBlock* imhdBlock0 = block->findChild("IMHD");
+			if (!imhdBlock0)
+				continue;
+
+			ScummIMHDBlock* imhdBlock = dynamic_cast<ScummIMHDBlock*>(imhdBlock0);
+			ASSERT(imhdBlock);
+
+			int imObjId = imhdBlock->getObjId();
+			if (imObjId != objId)
+				continue;
+
+			wxString suffix;
+			suffix << wxT(": ") << obnaBlock->getString();
+			block->setFriendlyName(block->getFriendlyName() + suffix);
+			break;
+		}
+
+		return true;
+	}
+};
+
+/////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////
+

Modified: scummex/branches/gsoc2007-gameresbrowser/src/plugins/scumm/ScummBlockFactory.cpp
===================================================================
--- scummex/branches/gsoc2007-gameresbrowser/src/plugins/scumm/ScummBlockFactory.cpp	2007-07-20 21:51:08 UTC (rev 28153)
+++ scummex/branches/gsoc2007-gameresbrowser/src/plugins/scumm/ScummBlockFactory.cpp	2007-07-20 23:32:39 UTC (rev 28154)
@@ -260,7 +260,7 @@
 	CUSTOM_BLOCK("SCRP", scummScriptBlockPresenterGUID())
 	CUSTOM_BLOCK("ENCD", scummScriptBlockPresenterGUID())
 	CUSTOM_BLOCK("EXCD", scummScriptBlockPresenterGUID())
-	CUSTOM_BLOCK("VERB", scummScriptBlockPresenterGUID())
+	CUSTOM_BLOCK_EX(ScummVERBBlock, "VERB", scummScriptBlockPresenterGUID())
 	CUSTOM_BLOCK("LS", scummScriptBlockPresenterGUID())
 	CUSTOM_BLOCK("SC", scummScriptBlockPresenterGUID())
 	CUSTOM_BLOCK("EN", scummScriptBlockPresenterGUID())
@@ -313,8 +313,9 @@
 	SCUMM_BLOCK(RawScummBlock, "RIFF", TILL_END, -1, -1, INVALID_FLAGS) //TODO: parse it properly
 	BASIC_BLOCK("ROL ")
 	BLOCKY_STOPPER("ROOM")
-	DATA_BLOCK(ScummIMHDBlock, "IMHD", CoreFileTypes::binaryParserGUID())
 	DATA_BLOCK(ScummRMHDBlock, "RMHD", scummRMHDBlockPresenterGUID())
+	DATA_BLOCK(ScummIMHDBlock, "IMHD", scummIMHDBlockPresenterGUID())
+	DATA_BLOCK(ScummCDHDBlock, "CDHD", scummCDHDBlockPresenterGUID())
 	BLOCKY_BLOCK("RMSC")
 	BASIC_BLOCK("SPK ")
 	BASIC_BLOCK("STOP")
@@ -322,9 +323,7 @@
 	CUSTOM_BLOCK("TRNS", scummTRNSBlockPresenterGUID())
 	CUSTOM_BLOCK_EX(ScummNLSCBlock, "NLSC", scummNLSCBlockPresenterGUID())
 	CUSTOM_BLOCK_EX(ScummOBNABlock, "OBNA", scummStringBlockPresenterGUID())
-	SCUMM_BLOCK_EX(ScummBlock, "OBCD", INVALID_SIZE_MODE, -1, -1,
-					EAGER_PARSE | PARSE_SUB_BLOCKS,		//EAGER_PARSE to parse OBNA block and set _friendlyName
-					blockyBlockPresenterGUID())
+	CUSTOM_BLOCK_EX(ScummOBCDBlock, "OBCD", blockyBlockPresenterGUID())
 
 	BLOCKY_BLOCK("WRAP") //FIXME: Is this ok? Shouldn't the OFFS subblock be used here?
 	//BLOCKY_BLOCK("SOUN") //This not ok.

Modified: scummex/branches/gsoc2007-gameresbrowser/src/plugins/scumm/ScummCommonPresenters.cpp
===================================================================
--- scummex/branches/gsoc2007-gameresbrowser/src/plugins/scumm/ScummCommonPresenters.cpp	2007-07-20 21:51:08 UTC (rev 28153)
+++ scummex/branches/gsoc2007-gameresbrowser/src/plugins/scumm/ScummCommonPresenters.cpp	2007-07-20 23:32:39 UTC (rev 28154)
@@ -114,18 +114,25 @@
 	ASSERT(rootBlock);
 
 	int scummVersion = rootBlock->getScummVersion();
-	if (scummVersion != -1) {
-		Common::SeekableReadStream* stream = block->getStream();
-		stream->seek(0, SEEK_SET);
-		DeScumm descumm(*stream, stream->size(), scummVersion);
+	if (scummVersion == -1) {
+		_text = wxT("<Unknown Scumm Version>");
+		return;
+	}
 
-		_text = descumm.getText();
-		if (_text.IsEmpty())
-			_text = wxT("<Empty script>");
-	} else {
-		if (_text.IsEmpty())
-			_text = wxT("<Unknown Scumm Version>");
+	if (block->getTag()->equals("VERB")) {
+		ScummVERBBlock* verbBlock = dynamic_cast<ScummVERBBlock*>(block);
+		ASSERT(verbBlock);
+		_text << wxT("Sorry, VERBs don't work yet. God knows why...") << wxEndl();
+		_text << wxT("Number of verbs: ") << verbBlock->getVerbOffsets().size() << wxEndl();
+		return;
 	}
+
+	stream->seek(0, SEEK_SET);
+	DeScumm descumm(*stream, stream->size(), scummVersion);
+
+	_text = descumm.getText();
+	if (_text.IsEmpty())
+		_text = wxT("<Empty script>");
 }
 
 /////////////////////////////////////////////////////////////////////////////

Modified: scummex/branches/gsoc2007-gameresbrowser/src/plugins/scumm/ScummFileTypes.cpp
===================================================================
--- scummex/branches/gsoc2007-gameresbrowser/src/plugins/scumm/ScummFileTypes.cpp	2007-07-20 21:51:08 UTC (rev 28153)
+++ scummex/branches/gsoc2007-gameresbrowser/src/plugins/scumm/ScummFileTypes.cpp	2007-07-20 23:32:39 UTC (rev 28154)
@@ -31,6 +31,8 @@
 SAFE_LOCAL_STATIC(scummLOFFBlockPresenterGUID, BGUID, (wxT("ScummObjects"), wxT("ScummLOFFBlockPresenter"), 1) )
 SAFE_LOCAL_STATIC(scummOFFSBlockPresenterGUID, BGUID, (wxT("ScummObjects"), wxT("ScummOFFSBlockPresenter"), 1) )
 SAFE_LOCAL_STATIC(scummRMHDBlockPresenterGUID, BGUID, (wxT("ScummObjects"), wxT("ScummRMHDBlockPresenter"), 1) )
+SAFE_LOCAL_STATIC(scummIMHDBlockPresenterGUID, BGUID, (wxT("ScummObjects"), wxT("ScummIMHDBlockPresenter"), 1) )
+SAFE_LOCAL_STATIC(scummCDHDBlockPresenterGUID, BGUID, (wxT("ScummObjects"), wxT("ScummCDHDBlockPresenter"), 1) )
 SAFE_LOCAL_STATIC(scummTRNSBlockPresenterGUID, BGUID, (wxT("ScummObjects"), wxT("ScummTRNSBlockPresenter"), 1) )
 SAFE_LOCAL_STATIC(scummNLSCBlockPresenterGUID, BGUID, (wxT("ScummObjects"), wxT("ScummNLSCBlockPresenter"), 1) )
 

Modified: scummex/branches/gsoc2007-gameresbrowser/src/plugins/scumm/ScummFileTypes.h
===================================================================
--- scummex/branches/gsoc2007-gameresbrowser/src/plugins/scumm/ScummFileTypes.h	2007-07-20 21:51:08 UTC (rev 28153)
+++ scummex/branches/gsoc2007-gameresbrowser/src/plugins/scumm/ScummFileTypes.h	2007-07-20 23:32:39 UTC (rev 28154)
@@ -33,6 +33,8 @@
 SAFE_LOCAL_STATIC_DECL(scummLOFFBlockPresenterGUID, BGUID)
 SAFE_LOCAL_STATIC_DECL(scummOFFSBlockPresenterGUID, BGUID)
 SAFE_LOCAL_STATIC_DECL(scummRMHDBlockPresenterGUID, BGUID)
+SAFE_LOCAL_STATIC_DECL(scummIMHDBlockPresenterGUID, BGUID)
+SAFE_LOCAL_STATIC_DECL(scummCDHDBlockPresenterGUID, BGUID)
 SAFE_LOCAL_STATIC_DECL(scummTRNSBlockPresenterGUID, BGUID)
 SAFE_LOCAL_STATIC_DECL(scummNLSCBlockPresenterGUID, BGUID)
 

Modified: scummex/branches/gsoc2007-gameresbrowser/src/plugins/scumm/ScummSpecificPresenters.cpp
===================================================================
--- scummex/branches/gsoc2007-gameresbrowser/src/plugins/scumm/ScummSpecificPresenters.cpp	2007-07-20 21:51:08 UTC (rev 28153)
+++ scummex/branches/gsoc2007-gameresbrowser/src/plugins/scumm/ScummSpecificPresenters.cpp	2007-07-20 23:32:39 UTC (rev 28154)
@@ -42,20 +42,64 @@
 void ScummRMHDBlockPresenter::doCreate(ScummBlock* block, Common::SeekableReadStream* stream) {
 	//infoout << wxT("ScummRMHDBlockPresenter::doCreate(): ") << std::endl;
 
-	uint32 width = stream->readUint16LE();
-	uint32 height = stream->readUint16LE();
-	uint32 objs = stream->readUint16LE();
+	ScummRMHDBlock* rmhdBlock = dynamic_cast<ScummRMHDBlock*>(block);
+	ASSERT(rmhdBlock);
 
 	wxString txt;
-	txt << wxT("Room Width: ") << width << wxEndl();
-	txt << wxT("Room Height: ") << height << wxEndl();
-	txt << wxT("Number Of Objects: ") << objs << wxEndl();
+	txt << wxT("Room Width: ") << rmhdBlock->getWidth() << wxEndl();
+	txt << wxT("Room Height: ") << rmhdBlock->getHeight() << wxEndl();
+	txt << wxT("Number Of Objects: ") << rmhdBlock->getNumObjs() << wxEndl();
 	_text = txt;
 }
 
 /////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////
 
+void ScummIMHDBlockPresenter::doCreate(ScummBlock* block, Common::SeekableReadStream* stream) {
+	//infoout << wxT("ScummIMHDBlockPresenter::doCreate(): ") << std::endl;
+
+	ScummIMHDBlock* imhdBlock = dynamic_cast<ScummIMHDBlock*>(block);
+	ASSERT(imhdBlock);
+
+	wxString txt;
+	txt << wxT("Object id: ") << imhdBlock->getObjId() << wxEndl();
+	txt << wxT("Number of images: ") << imhdBlock->getNumIMs() << wxEndl();
+	txt << wxT("Number of Z-planes per image: ") << imhdBlock->getZPsPerIM() << wxEndl();
+	txt << wxT("Unknown: ") << toHex(imhdBlock->getUnk(), 4) << wxEndl();
+	txt << wxT("X: ") << imhdBlock->getX() << wxEndl();
+	txt << wxT("Y: ") << imhdBlock->getY() << wxEndl();
+	txt << wxT("Width: ") << imhdBlock->getWidth() << wxEndl();
+	txt << wxT("Height: ") << imhdBlock->getHeight() << wxEndl();
+	txt << wxT("Number Of HotSpots: ") << imhdBlock->getNumHotSpots() << wxEndl();
+	_text = txt;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////
+
+void ScummCDHDBlockPresenter::doCreate(ScummBlock* block, Common::SeekableReadStream* stream) {
+	//infoout << wxT("ScummCDHDBlockPresenter::doCreate(): ") << std::endl;
+
+	ScummCDHDBlock* cdhdBlock = dynamic_cast<ScummCDHDBlock*>(block);
+	ASSERT(cdhdBlock);
+
+	wxString txt;
+	txt << wxT("Object id: ") << cdhdBlock->getObjId() << wxEndl();
+	txt << wxT("X: ") << cdhdBlock->getX() << wxEndl();
+	txt << wxT("Y: ") << cdhdBlock->getY() << wxEndl();
+	txt << wxT("Width: ") << cdhdBlock->getWidth() << wxEndl();
+	txt << wxT("Height: ") << cdhdBlock->getHeight() << wxEndl();
+	txt << wxT("Flags: ") << toHex(cdhdBlock->getFlagsField(), 2) << wxEndl();
+	txt << wxT("Parent: ") << cdhdBlock->getParentField() << wxEndl();
+	txt << wxT("Unknown0: ") << toHex(cdhdBlock->getUnk0(), 4) << wxEndl();
+	txt << wxT("Unknown1: ") << toHex(cdhdBlock->getUnk1(), 4) << wxEndl();
+	txt << wxT("Actor Dir: ") << cdhdBlock->getActorDir() << wxEndl();
+	_text = txt;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////
+
 void ScummTRNSBlockPresenter::doCreate(ScummBlock* block, Common::SeekableReadStream* stream) {
 	//infoout << wxT("ScummTRNSBlockPresenter::doCreate(): ") << std::endl;
 

Modified: scummex/branches/gsoc2007-gameresbrowser/src/plugins/scumm/ScummSpecificPresenters.h
===================================================================
--- scummex/branches/gsoc2007-gameresbrowser/src/plugins/scumm/ScummSpecificPresenters.h	2007-07-20 21:51:08 UTC (rev 28153)
+++ scummex/branches/gsoc2007-gameresbrowser/src/plugins/scumm/ScummSpecificPresenters.h	2007-07-20 23:32:39 UTC (rev 28154)
@@ -18,6 +18,8 @@
 // This file declares presenters specific for the following scumm chunks:
 //		OFFS
 //		RMHD
+//		IMHD
+//		CDHD
 //		TRNS
 //		NLSC
 //		LOFF
@@ -54,6 +56,30 @@
 /////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////
 
+class SCUMM_PLUGIN_API ScummIMHDBlockPresenter : public ScummBlockTextPresenter {
+	DECLARE_BOBJECT_CLASS(ScummIMHDBlockPresenter, ScummBlockTextPresenter)
+
+public:
+	ASSIGN_DESC(0,wxT("ScummObjects"), 1)
+
+	virtual void doCreate(ScummBlock* block, Common::SeekableReadStream* stream);
+};
+
+/////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////
+
+class SCUMM_PLUGIN_API ScummCDHDBlockPresenter : public ScummBlockTextPresenter {
+	DECLARE_BOBJECT_CLASS(ScummCDHDBlockPresenter, ScummBlockTextPresenter)
+
+public:
+	ASSIGN_DESC(0,wxT("ScummObjects"), 1)
+
+		virtual void doCreate(ScummBlock* block, Common::SeekableReadStream* stream);
+};
+
+/////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////
+
 class SCUMM_PLUGIN_API ScummTRNSBlockPresenter : public ScummBlockTextPresenter {
 	DECLARE_BOBJECT_CLASS(ScummTRNSBlockPresenter, ScummBlockTextPresenter)
 

Modified: scummex/branches/gsoc2007-gameresbrowser/vc8/basic_plugin/basic_plugin.vcproj
===================================================================
--- scummex/branches/gsoc2007-gameresbrowser/vc8/basic_plugin/basic_plugin.vcproj	2007-07-20 21:51:08 UTC (rev 28153)
+++ scummex/branches/gsoc2007-gameresbrowser/vc8/basic_plugin/basic_plugin.vcproj	2007-07-20 23:32:39 UTC (rev 28154)
@@ -416,10 +416,6 @@
 			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
 			>
 		</Filter>
-		<File
-			RelativePath=".\ReadMe.txt"
-			>
-		</File>
 	</Files>
 	<Globals>
 	</Globals>

Modified: scummex/branches/gsoc2007-gameresbrowser/wxdev/Browser.layout
===================================================================
--- scummex/branches/gsoc2007-gameresbrowser/wxdev/Browser.layout	2007-07-20 21:51:08 UTC (rev 28153)
+++ scummex/branches/gsoc2007-gameresbrowser/wxdev/Browser.layout	2007-07-20 23:32:39 UTC (rev 28154)
@@ -25,7 +25,7 @@
 TopLine=1
 LeftChar=1
 Open=1
-Top=0
+Top=1
 [Editor_1]
 CursorCol=1
 CursorRow=1
@@ -49,7 +49,7 @@
 TopLine=141
 LeftChar=1
 Open=1
-Top=1
+Top=0
 [Editor_6]
 CursorCol=1
 CursorRow=57
@@ -60,7 +60,7 @@
 [Editor_8]
 CursorCol=1
 CursorRow=114
-TopLine=106
+TopLine=114
 LeftChar=1
 Open=1
 Top=0


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