[Scummvm-cvs-logs] SF.net SVN: scummvm:[41467] scummvm/branches/gsoc2009-draci/engines/draci

dkasak13 at users.sourceforge.net dkasak13 at users.sourceforge.net
Fri Jun 12 11:45:13 CEST 2009


Revision: 41467
          http://scummvm.svn.sourceforge.net/scummvm/?rev=41467&view=rev
Author:   dkasak13
Date:     2009-06-12 09:45:12 +0000 (Fri, 12 Jun 2009)

Log Message:
-----------
Properly documented everything (including the new DraciFont class). Reshuffled some old comments.

Modified Paths:
--------------
    scummvm/branches/gsoc2009-draci/engines/draci/barchive.h
    scummvm/branches/gsoc2009-draci/engines/draci/font.cpp
    scummvm/branches/gsoc2009-draci/engines/draci/font.h
    scummvm/branches/gsoc2009-draci/engines/draci/gpldisasm.cpp
    scummvm/branches/gsoc2009-draci/engines/draci/gpldisasm.h

Modified: scummvm/branches/gsoc2009-draci/engines/draci/barchive.h
===================================================================
--- scummvm/branches/gsoc2009-draci/engines/draci/barchive.h	2009-06-12 09:04:35 UTC (rev 41466)
+++ scummvm/branches/gsoc2009-draci/engines/draci/barchive.h	2009-06-12 09:45:12 UTC (rev 41467)
@@ -31,7 +31,7 @@
 namespace Draci {
 
 /**
- *  Represents individual files inside the archive
+ *  Represents individual files inside the archive.
  */
 
 struct BAFile {
@@ -40,7 +40,8 @@
 	byte *_data;
 	byte _crc;
 
-	void closeFile(void) { //!< Releases the file data (for memory considerations)
+	/** Releases the file data (for memory considerations) */
+	void closeFile(void) {  
 		delete _data;
 		_data = NULL;
 	}

Modified: scummvm/branches/gsoc2009-draci/engines/draci/font.cpp
===================================================================
--- scummvm/branches/gsoc2009-draci/engines/draci/font.cpp	2009-06-12 09:04:35 UTC (rev 41466)
+++ scummvm/branches/gsoc2009-draci/engines/draci/font.cpp	2009-06-12 09:45:12 UTC (rev 41467)
@@ -33,13 +33,30 @@
 DraciFont::DraciFont(Common::String &filename) : 
 	_fontHeight(0), _maxCharWidth(0), 
 	_charWidths(NULL), _charData(0) { 
-	setFont(filename); 
+	setFont(filename);
 }
 
 DraciFont::~DraciFont() {
 	 freeFont(); 
 }
 
+/**
+ * @brief Loads fonts from a file
+ * @param path Path to font file
+ * @return true if the font was loaded successfully, false otherwise
+ *
+ * Loads fonts from a file into a DraciFont instance. The original game uses two
+ * fonts (located inside files "Small.fon" and "Big.fon"). The characters in the
+ * font are indexed from the ASCII space (decimal value 32) so an appropriate
+ * offset must be added to convert them to equivalent char values, 
+ * i.e. kDraciIndexOffset.
+ *
+ * font format: [1 byte] maximum character width
+ *				[1 byte] font height
+ *				[138 bytes] character widths of all 138 characters in the font
+ *				[138 * fontHeight * maxWidth bytes] character data, stored row-wise 
+ */
+
 bool DraciFont::setFont(Common::String &filename) {
 	
 	// If there is a font already loaded, free it
@@ -89,6 +106,14 @@
 	return _charWidths[chr - kCharIndexOffset];
 }
 
+/**
+ * @brief Draw a char to a Graphics::Surface
+ * @param dst 	Pointer to the destination surface
+ * @param chr 	Character to draw (ASCII value)
+ * @param tx  	Horizontal offset on the surface
+ * @param ty  	Vertical offset on the surface
+ */
+
 void DraciFont::drawChar(Graphics::Surface *dst, uint8 chr, int tx, int ty) const {
 	assert(dst != NULL);
 	byte *ptr = (byte *)dst->getBasePtr(tx, ty);
@@ -120,6 +145,16 @@
 	}
 }
 
+/**
+ * @brief Draw a string to a Graphics::Surface
+ *
+ * @param dst 		Pointer to the destination surface
+ * @param str 		String to draw
+ * @param x  		Horizontal offset on the surface
+ * @param y  		Vertical offset on the surface
+ * @param spacing 	Space to leave between individual characters. Defaults to 0. 
+ */
+
 void DraciFont::drawString(Graphics::Surface *dst, Common::String str, 
 							int x, int y, int spacing) const {
 	assert(dst != NULL);	
@@ -131,6 +166,15 @@
 	}
 }
 
+/**
+ * @brief Calculate the width of a string when drawn in the current font
+ *
+ * @param str 		String to draw
+ * @param spacing	Space to leave between individual characters. Defaults to 0. 
+ *
+ * @return The calculated width of the string 
+ */
+
 int DraciFont::getStringWidth(Common::String &str, int spacing) const {
 	int width = 0;	
 	uint len = str.size();

Modified: scummvm/branches/gsoc2009-draci/engines/draci/font.h
===================================================================
--- scummvm/branches/gsoc2009-draci/engines/draci/font.h	2009-06-12 09:04:35 UTC (rev 41466)
+++ scummvm/branches/gsoc2009-draci/engines/draci/font.h	2009-06-12 09:45:12 UTC (rev 41467)
@@ -27,6 +27,10 @@
 
 namespace Draci {
 
+/**
+ *  Represents the game's fonts. See docs for setFont() for font format details.
+ */
+
 class DraciFont {
 	
 public: 
@@ -44,15 +48,20 @@
 private:
 	uint8 _fontHeight;
 	uint8 _maxCharWidth;
+	
+	/** Pointer to an array of individual char widths */	
 	uint8 *_charWidths;
+	
+	/** Pointer to a raw byte array representing font pixels stored row-wise */
 	byte *_charData;
 	
-	// Number of glyphs in the font
+	/** Number of glyphs in the font */
 	static const unsigned int kCharNum = 138;
 
-	// Chars are indexed from the ASCII space (decimal value 32)
+	/** Chars are indexed from the ASCII space (decimal value 32) */
 	static const unsigned int kCharIndexOffset = 32;
 
+	/** Internal function for freeing fonts when destructing/loading another */
 	void freeFont();
 };
 

Modified: scummvm/branches/gsoc2009-draci/engines/draci/gpldisasm.cpp
===================================================================
--- scummvm/branches/gsoc2009-draci/engines/draci/gpldisasm.cpp	2009-06-12 09:04:35 UTC (rev 41466)
+++ scummvm/branches/gsoc2009-draci/engines/draci/gpldisasm.cpp	2009-06-12 09:45:12 UTC (rev 41467)
@@ -23,37 +23,6 @@
  *
  */
 
-/**
- * @brief GPL2 bytecode disassembler
- * @param gplcode A pointer to the bytecode
- *        len Length of the bytecode
- *
- * GPL2 is short for Game Programming Language 2 which is the script language
- * used by Draci Historie. This is a simple disassembler for the language.
- *
- * A compiled GPL2 program consists of a stream of bytes representing commands
- * and their parameters. The syntax is as follows:
- *
- * Syntax of a command:
- *	<name of the command> <number> <sub-number> <list of parameters...>
- *
- *	Syntax of a parameter:
- *	- 1: integer number literally passed to the program
- *	- 2-1: string stored in the reservouir of game strings (i.e. something to be
- *	  displayed) and stored as an index in this list
- *	- 2-2: string resolved by the compiler (i.e., a path to another file) and
- *	  replaced by an integer index of this entity in the appropriate namespace
- *	  (e.g., the index of the palette, location, ...)
- *	- 3-0: relative jump to a label defined in this code.  Each label must be
- *	  first declared in the beginning of the program.
- *	- 3-1 .. 3-9: index of an entity in several namespaces, defined in file ident
- *	- 4: mathematical expression compiled into a postfix format
- *
- * 	In the compiled program, parameters of type 1..3 are represented by a single
- *	16-bit integer.  The called command knows by its definition what namespace the
- *	value comes from.
- */
-
 #include "common/debug.h"
 #include "common/stream.h"
 #include "common/stack.h"
@@ -64,6 +33,8 @@
 namespace Draci {
 
 // FIXME: Change parameter types to names once I figure out what they are exactly
+
+/** A table of all the commands the game player uses */
 GPL2Command gplCommands[] = {
 	{ 0,  0, "gplend",				0, { 0 } },
 	{ 0,  1, "exit",				0, { 0 } },
@@ -122,6 +93,7 @@
 	{ 27, 1, "FeedPassword", 		3, { 1, 1, 1 } }
 };
 
+/** Operators used by the mathematical evaluator */
 Common::String operators[] = {
 	"oper_and",
 	"oper_or",
@@ -139,6 +111,7 @@
 	"oper_minus"
 };
 
+/** Functions used by the mathematical evaluator */
 Common::String functions[] = {
 	"F_Not",
 	"F_Random",
@@ -161,6 +134,7 @@
 
 const unsigned int kNumCommands = sizeof gplCommands / sizeof gplCommands[0];
 
+/** Type of mathematical object */
 enum mathExpressionObject {
 	kMathEnd,
 	kMathNumber,
@@ -170,6 +144,12 @@
 };
 
 // FIXME: The evaluator is now complete but I still need to implement callbacks
+
+/**
+ * @brief Evaluates mathematical expressions
+ * @param reader Stream reader set to the beginning of the expression
+ */
+
 void handleMathExpression(Common::MemoryReadStream &reader) {
 	Common::Stack<uint16> stk;
 	mathExpressionObject obj;
@@ -224,6 +204,15 @@
 	return;
 }
 
+/**
+ * @brief Find the current command in the internal table
+ *
+ * @param num 		Command number
+ * @param subnum 	Command subnumer
+ *
+ * @return NULL if command is not found. Otherwise, a pointer to a GPL2Command
+ *         struct representing the command.
+ */
 GPL2Command *findCommand(byte num, byte subnum) {
 	unsigned int i = 0;
 	while (1) {
@@ -245,6 +234,37 @@
 	return NULL;
 }
 
+/**
+ * @brief GPL2 bytecode disassembler
+ * @param gplcode A pointer to the bytecode
+ * @param len Length of the bytecode
+ *
+ * GPL2 is short for Game Programming Language 2 which is the script language
+ * used by Draci Historie. This is a simple disassembler for the language.
+ *
+ * A compiled GPL2 program consists of a stream of bytes representing commands
+ * and their parameters. The syntax is as follows:
+ *
+ * Syntax of a command:
+ *	<name of the command> <number> <sub-number> <list of parameters...>
+ *
+ *	Syntax of a parameter:
+ *	- 1: integer number literally passed to the program
+ *	- 2-1: string stored in the reservouir of game strings (i.e. something to be
+ *	  displayed) and stored as an index in this list
+ *	- 2-2: string resolved by the compiler (i.e., a path to another file) and
+ *	  replaced by an integer index of this entity in the appropriate namespace
+ *	  (e.g., the index of the palette, location, ...)
+ *	- 3-0: relative jump to a label defined in this code.  Each label must be
+ *	  first declared in the beginning of the program.
+ *	- 3-1 .. 3-9: index of an entity in several namespaces, defined in file ident
+ *	- 4: mathematical expression compiled into a postfix format
+ *
+ * 	In the compiled program, parameters of type 1..3 are represented by a single
+ *	16-bit integer.  The called command knows by its definition what namespace the
+ *	value comes from.
+ */
+
 int gpldisasm(byte *gplcode, uint16 len) {
 	Common::MemoryReadStream reader(gplcode, len);
 

Modified: scummvm/branches/gsoc2009-draci/engines/draci/gpldisasm.h
===================================================================
--- scummvm/branches/gsoc2009-draci/engines/draci/gpldisasm.h	2009-06-12 09:04:35 UTC (rev 41466)
+++ scummvm/branches/gsoc2009-draci/engines/draci/gpldisasm.h	2009-06-12 09:45:12 UTC (rev 41467)
@@ -30,7 +30,14 @@
 
 namespace Draci {
 
-// FIXME: Add parameter types and function handlers
+// FIXME: Add function handlers
+
+/**
+ *  Represents a single command in the GPL scripting language bytecode.
+ *	Each command is represented in the bytecode by a command number and a 
+ *	subnumber.
+ */
+
 struct GPL2Command { 
 	byte _number; 
 	byte _subNumber; 
@@ -39,7 +46,7 @@
 	int _paramTypes[3];
 };
 
-const int kMaxParams = 3;
+const int kMaxParams = 3; //!< The maximum number of parameters for a GPL command
 
 int gpldisasm(byte *gplcode, uint16 len);
 


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