<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">XNA Diaries</title><subtitle type="html">A log of my (where me="Gary Kacmarcik") explorations with the XNA Framework, focusing on the creation of my game (don't we all have one) using the framework.
</subtitle><id>http://blogs.msdn.com/garykac/atom.xml</id><link rel="alternate" type="text/html" href="http://blogs.msdn.com/garykac/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blogs.msdn.com/garykac/atom.xml" /><generator uri="http://communityserver.org" version="2.1.61025.2">Community Server</generator><updated>2006-09-14T16:34:00Z</updated><entry><title>Game over...</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/garykac/archive/2006/12/01/game-over.aspx" /><id>http://blogs.msdn.com/garykac/archive/2006/12/01/game-over.aspx</id><published>2006-12-02T10:59:00Z</published><updated>2006-12-02T10:59:00Z</updated><content type="html">&lt;P&gt;This blog is officially closed and will no longer be updated. New posts will be made to&amp;nbsp;my &lt;A class="" href="http://garykac.blogspot.com/" mce_href="http://garykac.blogspot.com/"&gt;new blog&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Thank you for playing &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1192072" width="1" height="1"&gt;</content><author><name>garykac</name><uri>http://blogs.msdn.com/members/garykac.aspx</uri></author></entry><entry><title>Status of XNAExtras</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/garykac/archive/2006/12/01/status-of-xnaextras.aspx" /><id>http://blogs.msdn.com/garykac/archive/2006/12/01/status-of-xnaextras.aspx</id><published>2006-12-02T09:30:00Z</published><updated>2006-12-02T09:30:00Z</updated><content type="html">&lt;P&gt;I have been working with the legal&amp;nbsp;in Microsoft to see if it is possible to convert XNAExtras into a Shared Source project (perhaps on &lt;A class="" href="http://www.codeplex.com/" mce_href="http://www.codeplex.com/"&gt;Codeplex&lt;/A&gt;). There is still a bit of work to do on this, but I'm hopeful that something can be worked out. Opening it up to allow contributions from others would be wonderful since there have been many of you who have offered to help out - offers I was forced to refuse because of intellectual property concerns (sorry 'bout that).&lt;/P&gt;
&lt;P&gt;I will not be in a position to make any official announcements here about this, but I will include a link to any official announcements on my &lt;A class="" href="http://garykac.blogspot.com/" mce_href="http://garykac.blogspot.com/"&gt;new blog&lt;/A&gt;.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1192062" width="1" height="1"&gt;</content><author><name>garykac</name><uri>http://blogs.msdn.com/members/garykac.aspx</uri></author></entry><entry><title>Leaving Microsoft...</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/garykac/archive/2006/12/01/leaving-microsoft.aspx" /><id>http://blogs.msdn.com/garykac/archive/2006/12/01/leaving-microsoft.aspx</id><published>2006-12-01T18:15:00Z</published><updated>2006-12-01T18:15:00Z</updated><content type="html">&lt;P&gt;My apologies for the lack of any real content on this site for the past month or so. I've been rather busy doing non-game related activities, many of which center around making preparations to start a new job outside of Microsoft. It's been a lot of fun here the last 12 years (3 years in Outlook + 9 in Research), and I'll miss working with the great people who work here.&lt;/P&gt;
&lt;P&gt;After today, I will no longer be able to update this blog -&amp;nbsp;MSDN blogs are&amp;nbsp;(quite reasonably) for use by Microsoft employees only. I've created a new blog at &lt;A href="http://garykac.blogspot.com/" mce_href="http://garykac.blogspot.com/"&gt;http://garykac.blogspot.com/&lt;/A&gt;, but there really isn't anything there at the moment.&lt;/P&gt;
&lt;P&gt;I'm turning off anonymous comments (since I won't be able to approve them).&amp;nbsp;I've also updated the blog settings so that emails sent to the blog-owner will be sent to my Gmail account rather than my soon-to-be-disappearing Microsoft account.&lt;/P&gt;
&lt;P&gt;So, what's going to happen to XNAExtras? I'll be posting more on that later today...&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1184382" width="1" height="1"&gt;</content><author><name>garykac</name><uri>http://blogs.msdn.com/members/garykac.aspx</uri></author><category term="Off Topic" scheme="http://blogs.msdn.com/garykac/archive/tags/Off+Topic/default.aspx" /></entry><entry><title>Publications</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/garykac/archive/2006/12/01/publications.aspx" /><id>http://blogs.msdn.com/garykac/archive/2006/12/01/publications.aspx</id><published>2006-12-01T18:07:00Z</published><updated>2006-12-01T18:07:00Z</updated><content type="html">&lt;P&gt;Normally, my list of publications lives on &lt;A class="" href="http://research.microsoft.com/~garykac" mce_href="http://research.microsoft.com/~garykac"&gt;http://research.microsoft.com/~garykac&lt;/A&gt;, but since that page may be disappearing soon, here is a list (as of 1 December 2006 - with links to papers when available).&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Publications&lt;/B&gt; 
&lt;UL&gt;
&lt;LI&gt;G.Kacmarcik, M.Gamon &lt;A href="http://research.microsoft.com/nlp/publications/aclcoling06-kacmarcik-gamon.pdf" mce_href="http://research.microsoft.com/nlp/publications/aclcoling06-kacmarcik-gamon.pdf"&gt;&lt;B&gt;Obfuscating Document Stylometry to Preserve Author Anonymity&lt;/B&gt;&lt;/A&gt;, In &lt;I&gt;The Joint Conference of the International Committee on Computational Linguistics and the Association for Computational Linguistics&lt;/I&gt;, COLING/ACL 06, Sydney, Australia, 2006. (&lt;A href="http://research.microsoft.com/nlp/publications/aclcoling06-kacmarcik-gamon-poster.pdf" mce_href="http://research.microsoft.com/nlp/publications/aclcoling06-kacmarcik-gamon-poster.pdf"&gt;Poster&lt;/A&gt;) 
&lt;TABLE class=""&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;&lt;SPAN style="FONT-SIZE: 60%"&gt;Abstract:&lt;/SPAN&gt;&lt;/TD&gt;
&lt;TD class=""&gt;&lt;SPAN style="FONT-SIZE: 50%"&gt;This paper explores techniques for reducing the effectiveness of standard authorship attribution techniques so that an author &lt;I&gt;A&lt;/I&gt; can preserve anonymity for a particular document &lt;I&gt;D&lt;/I&gt;. We discuss feature selection and adjustment and show how this information can be fed back to the author to create a new document &lt;I&gt;D’&lt;/I&gt; for which the calculated attribution moves away from &lt;I&gt;A&lt;/I&gt;. Since it can be labor intensive to adjust the document in this fashion, we attempt to quantify the amount of effort required to produce the anonymized document and introduce two levels of anonymization: shallow and deep. In our test set, we show that shallow anonymization can be achieved by making 14 changes per 1000 words to reduce the likelihood of identifying &lt;I&gt;A&lt;/I&gt; as the author by an average of more than 83%. For deep anonymization, we adapt the unmasking work of Koppel and Schler to provide feedback that allows the author to choose the level of anonymization. &lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/LI&gt;
&lt;LI&gt;G.Kacmarcik &lt;A href="http://research.microsoft.com/copyright/accept.asp?path=http://research.microsoft.com/nlp/publications/aiide06_kacmarcik.pdf&amp;amp;pub=aaai" mce_href="http://research.microsoft.com/copyright/accept.asp?path=http://research.microsoft.com/nlp/publications/aiide06_kacmarcik.pdf&amp;amp;pub=aaai"&gt;&lt;B&gt;Using Natural Language to Manage NPC Dialog&lt;/B&gt;&lt;/A&gt;, In &lt;I&gt;Artificial Intelligence and Interactive Digital Entertainment&lt;/I&gt;, AIIDE 06, Marina del Rey, California, 2006. (&lt;A href="http://research.microsoft.com/nlp/publications/aiide06_kacmarcik_poster.pdf" mce_href="http://research.microsoft.com/nlp/publications/aiide06_kacmarcik_poster.pdf"&gt;Poster&lt;/A&gt;) 
&lt;TABLE class=""&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;&lt;SPAN style="FONT-SIZE: 60%"&gt;Abstract:&lt;/SPAN&gt;&lt;/TD&gt;
&lt;TD class=""&gt;&lt;SPAN style="FONT-SIZE: 50%"&gt;In this document, we describe our work applying natural language (NL) technologies to improve non-player character (NPC) dialog interactions in games, specifically role-playing games (RPGs). Our approach is to adapt the standard dialog menu interaction so that the menu items are dynamically-generated during game runtime rather than scripted during development time. In our system, menu items are constructed by manipulating abstract semantic representations stored in the NPC knowledgebase, converting them into NL text, and then ranking them so that the most relevant items are placed at the top of the menu. We demonstrate our approach in the context of a small RPG. &lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/LI&gt;
&lt;LI&gt;H.Suzuki, G.Kacmarcik &lt;A href="http://research.microsoft.com/copyright/accept.asp?path=http://research.microsoft.com/nlp/publications/lrec06_refref.pdf&amp;amp;pub=elra" mce_href="http://research.microsoft.com/copyright/accept.asp?path=http://research.microsoft.com/nlp/publications/lrec06_refref.pdf&amp;amp;pub=elra"&gt;&lt;B&gt;RefRef: A Tool for Viewing and Exploring Coreference Space&lt;/B&gt;&lt;/A&gt;, In &lt;I&gt;The 5th International Conference on Language Resources and Evaluation&lt;/I&gt;, LREC 06, Genoa, Italy, 2006. 
&lt;TABLE class=""&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;&lt;SPAN style="FONT-SIZE: 60%"&gt;Abstract:&lt;/SPAN&gt;&lt;/TD&gt;
&lt;TD class=""&gt;&lt;SPAN style="FONT-SIZE: 50%"&gt;We present RefRef, a tool for viewing and exploring coreference space, which is publicly available for research purposes. Unlike similar tools currently available whose main goal is to assist the annotation process of coreference links, RefRef is dedicated for viewing and exploring coreference-annotated data, whether manually tagged or automatically resolved. RefRef is also highly customizable, as the tool is being made available with the source code. In this paper we describe the main functionalities of RefRef as well as some possibilities for customization to meet the specific needs of the users of such coreference-annotated text. &lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;MSR RefRef (the tool described in this paper) can be downloaded &lt;A href="http://research.microsoft.com/research/downloads/download.aspx?FUID=d9e73a55-b717-4663-b2d9-285f1a0779a0" mce_href="http://research.microsoft.com/research/downloads/download.aspx?FUID=d9e73a55-b717-4663-b2d9-285f1a0779a0"&gt;here&lt;/A&gt;. &lt;/LI&gt;
&lt;LI&gt;G.Kacmarcik, &lt;A href="http://research.microsoft.com/copyright/accept.asp?path=http://research.microsoft.com/nlp/publications/ijcnlp05-kacmarcik.pdf&amp;amp;pub=afnlp" mce_href="http://research.microsoft.com/copyright/accept.asp?path=http://research.microsoft.com/nlp/publications/ijcnlp05-kacmarcik.pdf&amp;amp;pub=afnlp"&gt;&lt;B&gt;Multi-Modal Question Answering: Questions without Keyboards&lt;/B&gt;&lt;/A&gt;, In &lt;I&gt;The 2nd International Joint Conference on Natural Language Processing&lt;/I&gt;, IJCNLP 05, Jeju Island, Republic of Korea, 2005. (&lt;A href="http://research.microsoft.com/nlp/publications/ijcnlp05-kacmarcik-poster.pdf" mce_href="http://research.microsoft.com/nlp/publications/ijcnlp05-kacmarcik-poster.pdf"&gt;Poster&lt;/A&gt;) 
&lt;TABLE class=""&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;&lt;SPAN style="FONT-SIZE: 60%"&gt;Abstract:&lt;/SPAN&gt;&lt;/TD&gt;
&lt;TD class=""&gt;&lt;SPAN style="FONT-SIZE: 50%"&gt;This paper describes our work to allow players in a virtual world to pose questions without relying on textual input. Our approach is to create enhanced virtual photographs by annotating them with semantic information from the 3D environment’s scene graph. The player can then use these annotated photos to interact with inhabitants of the world through automatically generated queries that are guaranteed to be relevant, grammatical and unambiguous. While the range of queries is more limited than a text input system would permit, in the gaming environment that we are exploring these limitations are offset by the practical concerns that make text input inappropriate. &lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/LI&gt;
&lt;LI&gt;G.Kacmarcik, &lt;A href="http://research.microsoft.com/copyright/accept.asp?path=http://research.microsoft.com/nlp/publications/AAAI05-QAinRPGs.pdf&amp;amp;pub=aaai" mce_href="http://research.microsoft.com/copyright/accept.asp?path=http://research.microsoft.com/nlp/publications/AAAI05-QAinRPGs.pdf&amp;amp;pub=aaai"&gt;&lt;B&gt;Question-Answering in Role-Playing Games&lt;/B&gt;&lt;/A&gt;, In &lt;I&gt;Papers from the AAAI Workshop on Question Answering in Restricted Domains&lt;/I&gt;, Technical Report WS-05-10, AAAI Press, Pittsburgh, Pennsylvania, pp.51-55, 2005. 
&lt;TABLE class=""&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;&lt;SPAN style="FONT-SIZE: 60%"&gt;Abstract:&lt;/SPAN&gt;&lt;/TD&gt;
&lt;TD class=""&gt;&lt;SPAN style="FONT-SIZE: 50%"&gt;In this paper, we give a general description of the issues associated with performing basic Question-Answering (QA) tasks against non-player characters (NPCs) within a simple role-playing game (RPG) or virtual world environment. We describe the aspects of this kind of QA system and provide an overview of our initial explorations into the implementation and evaluation of a QA system that is appropriate for RPG environments. We also introduce Keystone, a simple RPG environment that provides a small virtual world that allows different NPC controller backends to be plugged in thus allowing these systems to be evaluated in a more realistic game environment. &lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/LI&gt;
&lt;LI&gt;H.Suzuki, G.Kacmarcik, L.Vanderwende, A.Menezes, &lt;A href="http://www.research.microsoft.com/nlp/publications/jnlp05-mnex.pdf" mce_href="http://www.research.microsoft.com/nlp/publications/jnlp05-mnex.pdf"&gt;&lt;B&gt;Mindnet/mnex:意味関係データベースの自動構築と解析のためのツール&lt;/B&gt;&lt;/A&gt; &lt;I&gt;(Mindnet and mnex: An Environment for Exploring Semantic Space)&lt;/I&gt;, In 言語処理学会第11回全国大会論文集 &lt;I&gt;(Proceedings of the 11th Annual Meeting of the Society of Natural Language Processing)&lt;/I&gt;, Takamatsu, Japan, 2005. (in Japanese) 
&lt;TABLE class=""&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;&lt;SPAN style="FONT-SIZE: 60%"&gt;Abstract:&lt;/SPAN&gt;&lt;/TD&gt;
&lt;TD class=""&gt;&lt;SPAN style="FONT-SIZE: 50%"&gt;Mindnet(マインドネット)は通常のテキストデータから、単語間の相互意味関係を直接的・自動的に抽出したデータベースであり、mnex(ネックス)はこれをさまざまな観点から表示・探索するためのウェブ・ツールである。通常のシソーラスの機能に加え、ひとつの単語の意味関係だけでなく、2単語間の意味関係を、その意味関係のタイプを指定して表示することができる。Mindnetの意味関係の抽出は、人手によることなく、構文解析による意味関係の同定と、その重みづけの２段階に分けて行われる。重みづけは、語と語を結びつける意味関係のパスに対して行われ、有用な意味関係のみを抽出することを目的としている。 Mindnetは、辞書と百科事典をソースデータに用いて、まず英語で開発されたが、現在までに日本語でも辞書と百科事典テキストにもとづいたMindnetが構築されている。 &lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/LI&gt;
&lt;LI&gt;G.Kacmarcik, &lt;A href="http://research.microsoft.com/copyright/accept.asp?path=http://research.microsoft.com/nlp/publications/IJCNLP04-UsingFurigana.pdf&amp;amp;pub=afnlp" mce_href="http://research.microsoft.com/copyright/accept.asp?path=http://research.microsoft.com/nlp/publications/IJCNLP04-UsingFurigana.pdf&amp;amp;pub=afnlp"&gt;&lt;B&gt;Making Use of &lt;I&gt;Furigana&lt;/I&gt;&lt;/B&gt;&lt;/A&gt;, In &lt;I&gt;The 1st International Joint Conference on Natural Language Processing&lt;/I&gt;, IJCNLP 04, Sanya, Hainan Island, China, pp.159-164, 2004. 
&lt;TABLE class=""&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;&lt;SPAN style="FONT-SIZE: 60%"&gt;Abstract:&lt;/SPAN&gt;&lt;/TD&gt;
&lt;TD class=""&gt;&lt;SPAN style="FONT-SIZE: 50%"&gt;An interesting aspect of written Japanese that has not been well studied is the use of &lt;I&gt;furigana&lt;/I&gt;, or reading cues, to assist linguistic processing of text. Difficulties in processing this material have led to the situation where it is sometimes considered more convenient to simply remove the parenthetical material rather than to process it. This paper describes a system that makes use of the &lt;I&gt;furigana&lt;/I&gt; to assist with various tasks, including segmentation, word sense disambiguation and support for OOV items. The system reports an F-measure score of 93.3% on the task of matching the base text with its &lt;I&gt;furigana&lt;/I&gt;. &lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/LI&gt;
&lt;LI&gt;E.Brill, G.Kacmarcik, C.Brockett, &lt;A href="http://research.microsoft.com/copyright/accept.asp?path=http://research.microsoft.com/nlp/publications/NLPRS2001-Harvesting_Katakana_from_Query_Logs.pdf&amp;amp;pub=afnlp" mce_href="http://research.microsoft.com/copyright/accept.asp?path=http://research.microsoft.com/nlp/publications/NLPRS2001-Harvesting_Katakana_from_Query_Logs.pdf&amp;amp;pub=afnlp"&gt;&lt;B&gt;Automatically Harvesting &lt;I&gt;Katakana&lt;/I&gt;-English Term Pairs from Search Engine Query Logs&lt;/B&gt;&lt;/A&gt;, In &lt;I&gt;Proceedings of the Sixth Natural Language Processing Pacific Rim Symposium&lt;/I&gt;, NLPRS 2001, Tokyo, Japan, pp.393-399, 2001. (&lt;A href="http://www.afnlp.org/nlprs2001/pdf/0168-01.pdf" mce_href="http://www.afnlp.org/nlprs2001/pdf/0168-01.pdf"&gt;Alternate link&lt;/A&gt;) 
&lt;TABLE class=""&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;&lt;SPAN style="FONT-SIZE: 60%"&gt;Abstract:&lt;/SPAN&gt;&lt;/TD&gt;
&lt;TD class=""&gt;&lt;SPAN style="FONT-SIZE: 50%"&gt;This paper describes a method of extracting &lt;I&gt;katakana&lt;/I&gt; words and phrases, along with their English counterparts from non-aligned monolingual web search engine query logs. The method employs a trainable edit distance function to find &amp;lt;&lt;I&gt;katakana&lt;/I&gt;, English&amp;gt; pairs that have a high probability of being equivalent. These pairs can then be used to further bootstrap training of the edit distance function, resulting in improved back-transliteration from katakana to English. In addition, this is an effective method for mining large numbers of &lt;I&gt;katakana&lt;/I&gt; strings to enhance a bilingual lexicon. The improved edit distance function and enhanced lexicon can be used for more accurate alignment of bitexts, and for application during runtime MT and multilingual IR. &lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/LI&gt;
&lt;LI&gt;G.Kacmarcik, C.Brockett, H.Suzuki, &lt;A href="http://research.microsoft.com/copyright/accept.asp?path=http://www.research.microsoft.com/nlp/publications/COLING2000-Japanese_segmentation.pdf&amp;amp;pub=DFKI" mce_href="http://research.microsoft.com/copyright/accept.asp?path=http://www.research.microsoft.com/nlp/publications/COLING2000-Japanese_segmentation.pdf&amp;amp;pub=DFKI"&gt;&lt;B&gt;Robust Segmentation of Japanese Text into a Lattice for Parsing&lt;/B&gt;&lt;/A&gt;, In &lt;I&gt;Proceedings of the 18th International Conference on Computational Linguistics&lt;/I&gt;, COLING 2000, Saarbrüken, Germany, pp.390-396, 2000. 
&lt;TABLE class=""&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;&lt;SPAN style="FONT-SIZE: 60%"&gt;Abstract:&lt;/SPAN&gt;&lt;/TD&gt;
&lt;TD class=""&gt;&lt;SPAN style="FONT-SIZE: 50%"&gt;We describe a segmentation component that utilizes minimal syntactic knowledge to produce a lattice of word candidates for a broad coverage Japanese NL parser. The segmenter is a finite state morphological analyzer and text normalizer designed to handle the orthographic variations characteristic of written Japanese, including alternate spellings, script variation, vowel extensions and word-internal parenthetical material. This architecture differs from conventional Japanese wordbreakers in that it does not attempt to simultaneously attack the problems of identifying segmentation candidates and choosing the most probable analysis. To minimize duplication of effort between components and to give the segmenter greater freedom to address orthography issues, the task of choosing the best analysis is handled by the parser, which has access to a much richer set of linguistic information. By maximizing recall in the segmenter and allowing a precision of 34.7%, our parser currently achieves a breaking accuracy of ~97% over a wide variety of corpora. &lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/LI&gt;
&lt;LI&gt;H.Suzuki, C.Brockett, G.Kacmarcik, &lt;A href="http://research.microsoft.com/copyright/accept.asp?path=http://www.research.microsoft.com/nlp/publications/COLING2000-parser_for_Japanese_wordbreak.pdf&amp;amp;pub=DFKI" mce_href="http://research.microsoft.com/copyright/accept.asp?path=http://www.research.microsoft.com/nlp/publications/COLING2000-parser_for_Japanese_wordbreak.pdf&amp;amp;pub=DFKI"&gt;&lt;B&gt;Using a Broad-Coverage Parser for Word-Breaking in Japanese&lt;/B&gt;&lt;/A&gt;, In &lt;I&gt;Proceedings of the 18th International Conference on Computational Linguistics&lt;/I&gt;, COLING 2000, Saarbrüken, Germany, pp.822-827, 2000. 
&lt;TABLE class=""&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="" vAlign=top&gt;&lt;SPAN style="FONT-SIZE: 60%"&gt;Abstract:&lt;/SPAN&gt;&lt;/TD&gt;
&lt;TD class=""&gt;&lt;SPAN style="FONT-SIZE: 50%"&gt;We describe a method of word segmentation in Japanese in which a broad-coverage parser selects the best word sequence while producing a syntactic analysis. This technique is substantially different from traditional statistics- or heuristics-based models which attempt to select the best word sequence before handing it to the syntactic component. By breaking up the task of finding the best word sequence into the identification of words (in the word-breaking component) and the selection of the best sequence (a by-product of parsing), we have been able to simplify the task of each component and achieve high accuracy over a wide variety of data. Word-breaking accuracy of our system is currently around 97~98%. &lt;/SPAN&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/LI&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI&gt;G.Kacmarcik, &lt;B&gt;Optimizing PowerPC Code: Programming the PowerPC Chip in Assembly Language&lt;/B&gt;, Addison-Wesley, 1995. (ISBN 0201408392) &lt;/LI&gt;
&lt;LI&gt;G.Kacmarcik, &lt;B&gt;Assembly Language Programming and Optimization Techniques for the POWER Architecture&lt;/B&gt;, In &lt;I&gt;The 8th Annual MacHack Conference - The (B)leading Edge&lt;/I&gt;, Ann Arbor, Michigan, pp.7-38, June 1993. &lt;/LI&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI&gt;G.Kacmarcik, &lt;B&gt;A Neuroethological Model of the Cockroach Escape Response&lt;/B&gt;, Master's Thesis, Case Western Reserve University, CAISR Technical Report TR 91-133, June 1991. &lt;/LI&gt;
&lt;LI&gt;R.D.Beer, G.J.Kacmarcik, S.Chai, R.E.Ritzmann, H.J.Chiel, &lt;B&gt;Ventral giant interneuron wind fields in the cockroach modeled with constrained back-propagation&lt;/B&gt;, &lt;I&gt;Society for Neuroscience Abstracts&lt;/I&gt;, 17:1245, 1991. &lt;/LI&gt;
&lt;LI&gt;R.D.Beer, G.J.Kacmarcik, R.E.Ritzmann, H.J.Chiel, &lt;B&gt;A model of distributed sensorimotor control in the cockroach escape turn&lt;/B&gt;, In &lt;I&gt;Advances in Neural Information Processing Systems 3&lt;/I&gt;, NIPS 1990, R.P.Lippmann, J.Moody, D.S.Touretzky (eds), Morgan Kaufmann Publishers, 1990. &lt;/LI&gt;
&lt;LI&gt;R.D.Beer, G.J.Kacmarcik, R.E.Ritzmann, H.J.Chiel, &lt;B&gt;A computer model for escape in the cockroach&lt;/B&gt;, &lt;I&gt;Society for Neuroscience Abstracts&lt;/I&gt;, 16:759, 1990. &lt;/LI&gt;&lt;/UL&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1184244" width="1" height="1"&gt;</content><author><name>garykac</name><uri>http://blogs.msdn.com/members/garykac.aspx</uri></author><category term="NLP" scheme="http://blogs.msdn.com/garykac/archive/tags/NLP/default.aspx" /></entry><entry><title>XNAExtras update</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/garykac/archive/2006/12/01/xnaextras-update.aspx" /><link rel="enclosure" type="application/x-zip-compressed" length="525175" href="http://blogs.msdn.com/garykac/attachment/1184551.ashx" /><id>http://blogs.msdn.com/garykac/archive/2006/12/01/xnaextras-update.aspx</id><published>2006-12-01T18:00:00Z</published><updated>2006-12-01T18:00:00Z</updated><content type="html">&lt;P&gt;This is a minor update:&lt;/P&gt;
&lt;P&gt;Beta2 update (ContentManager)&lt;BR&gt;Minor bug fix with TextBoxes not deleting their backgrounds.&lt;BR&gt;Initial stab at compiling for the 360 (by #ifdef'ing&amp;nbsp;references to Texture2D.FromFile so that they can be removed easily)&lt;BR&gt;Temporarily remove CollisionDemo since it's acting up under beta2 (there are reports that it was acting up under beta1, but I was unable to repro them...) This demo will&amp;nbsp;come back once these bugs are fixed.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1184551" width="1" height="1"&gt;</content><author><name>garykac</name><uri>http://blogs.msdn.com/members/garykac.aspx</uri></author><category term="XNA" scheme="http://blogs.msdn.com/garykac/archive/tags/XNA/default.aspx" /></entry><entry><title>BMFontGen update (1119)</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/garykac/archive/2006/11/19/bmfontgen-update-_2800_1119_2900_.aspx" /><link rel="enclosure" type="application/x-zip-compressed" length="23209" href="http://blogs.msdn.com/garykac/attachment/1101166.ashx" /><id>http://blogs.msdn.com/garykac/archive/2006/11/19/bmfontgen-update-_2800_1119_2900_.aspx</id><published>2006-11-19T22:11:00Z</published><updated>2006-11-19T22:11:00Z</updated><content type="html">&lt;P&gt;I had a request to&amp;nbsp;add an option to expand each glyph with padding pixels, and I'm finally getting around to doing it.&lt;/P&gt;
&lt;P&gt;To add&amp;nbsp;&lt;EM&gt;n&lt;/EM&gt; pixels of padding around each glyph, you can now&amp;nbsp;use the&amp;nbsp;glyph pad option: &lt;STRONG&gt;-gpad &lt;EM&gt;n&lt;/EM&gt;&lt;/STRONG&gt;. If you only want padding in the x or y direction, then you can use &lt;STRONG&gt;-gpadx&lt;/STRONG&gt; or &lt;STRONG&gt;-gpady&lt;/STRONG&gt;. Adding padding will not affect how the font is displayed, except that additional transparent "padding" pixels will be copied.&lt;/P&gt;
&lt;P&gt;In general, you&amp;nbsp;don't need to use these options, but they can&amp;nbsp;be useful if you intend to&amp;nbsp;manipulate the font bitmap&amp;nbsp;in such a way that the glyphs expand in size. If you do not intend to edit the font bitmap, then you don't need to use these options.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1101166" width="1" height="1"&gt;</content><author><name>garykac</name><uri>http://blogs.msdn.com/members/garykac.aspx</uri></author><category term="XNA" scheme="http://blogs.msdn.com/garykac/archive/tags/XNA/default.aspx" /></entry><entry><title>BitmapFont update for beta2 (Finally!)</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/garykac/archive/2006/11/18/bitmapfont-update-for-beta2-finally.aspx" /><link rel="enclosure" type="application/x-zip-compressed" length="82100" href="http://blogs.msdn.com/garykac/attachment/1101130.ashx" /><id>http://blogs.msdn.com/garykac/archive/2006/11/18/bitmapfont-update-for-beta2-finally.aspx</id><published>2006-11-19T02:33:00Z</published><updated>2006-11-19T02:33:00Z</updated><content type="html">&lt;P&gt;As you've probably surmised from the last post, I seem to be somewhat loose in my interpretation of "later this week".&lt;/P&gt;
&lt;P&gt;Attached is an updated version (finally!) of the BitmapFont.cs class along with its corresponding demonstration project.&lt;/P&gt;
&lt;P&gt;Note that this update only covers the BitmapFont class, not the entire XNA Extras package. I hope to have an updated version of all the&amp;nbsp;XNA Extras classes&amp;nbsp;sometime "later this week"...&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1101130" width="1" height="1"&gt;</content><author><name>garykac</name><uri>http://blogs.msdn.com/members/garykac.aspx</uri></author><category term="XNA" scheme="http://blogs.msdn.com/garykac/archive/tags/XNA/default.aspx" /></entry><entry><title>XNA Extras and Beta2</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/garykac/archive/2006/11/02/xna-extras-and-beta2.aspx" /><id>http://blogs.msdn.com/garykac/archive/2006/11/02/xna-extras-and-beta2.aspx</id><published>2006-11-02T21:11:00Z</published><updated>2006-11-02T21:11:00Z</updated><content type="html">&lt;P&gt;This is a heads-up that the current release of XNA Extras requires some changes before it will work with the newly released &lt;A class="" href="http://blogs.msdn.com/xna/archive/2006/11/01/xna-game-studio-express-beta-2-available-for-download.aspx" mce_href="http://blogs.msdn.com/xna/archive/2006/11/01/xna-game-studio-express-beta-2-available-for-download.aspx"&gt;XNA Game Studio Express Beta 2&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;I'm hoping to find some time later this week (yes, I know it's already late in the week) and get an updated version up this weekend. Sorry about the delay!&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=934612" width="1" height="1"&gt;</content><author><name>garykac</name><uri>http://blogs.msdn.com/members/garykac.aspx</uri></author><category term="XNA" scheme="http://blogs.msdn.com/garykac/archive/tags/XNA/default.aspx" /><category term="Games" scheme="http://blogs.msdn.com/garykac/archive/tags/Games/default.aspx" /></entry><entry><title>Colliding sprites in XNAExtras</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/garykac/archive/2006/09/24/769335.aspx" /><id>http://blogs.msdn.com/garykac/archive/2006/09/24/769335.aspx</id><published>2006-09-24T18:00:00Z</published><updated>2006-09-24T18:00:00Z</updated><content type="html">&lt;P&gt;The latest release of XNAExtras added support for sprite collisions, and allows the collision detection to be either bounding box&amp;nbsp;(bbox) or&amp;nbsp;pixel based. This is settable per sprite - some sprites can&amp;nbsp;use bboxes and others can use pixels. The sprites will collide appropriately with each other even if they can't agree on how to do it.&lt;/P&gt;
&lt;P&gt;Here's a simple tutorial for how to use the collision detection built into XNAExtras:&lt;/P&gt;
&lt;P&gt;(1) Create an XSpriteManager.&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;m_mgrSprites = &lt;FONT color=#000080&gt;new&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;XSpriteManager&lt;/FONT&gt;();&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;(2) Create an XSprite.&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;m_mgrSprites.AddTexture(&lt;FONT color=#ff0000&gt;"tex"&lt;/FONT&gt;, &lt;FONT color=#ff0000&gt;"texture.png"&lt;/FONT&gt;, 64, 64);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;XSprite&lt;/FONT&gt; s1 = m_mgrSprites.AddSprite(&lt;FONT color=#ff0000&gt;"ball1"&lt;/FONT&gt;, &lt;FONT color=#ff0000&gt;"tex"&lt;/FONT&gt;);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;(3) Create another XSprite so that you have something to collide with.&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;XSprite&lt;/FONT&gt; s2 = m_mgrSprites.AddSprite(&lt;FONT color=#ff0000&gt;"ball2"&lt;/FONT&gt;, &lt;FONT color=#ff0000&gt;"tex"&lt;/FONT&gt;);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;(4) Enable collisions for these two sprites. For bounding box collisions, use:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;s1.SetCollideable(&lt;FONT color=#000080&gt;true&lt;/FONT&gt;);&lt;BR&gt;&amp;nbsp;&amp;nbsp;s2.SetCollideable(&lt;FONT color=#000080&gt;true&lt;/FONT&gt;);&lt;/FONT&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;If you want pixel based collisions, use:&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;s1.SetCollideable(&lt;FONT color=#000080&gt;true&lt;/FONT&gt;, &lt;FONT color=#0000ff&gt;XSpriteManager&lt;/FONT&gt;.&lt;FONT color=#0000ff&gt;CollisionFlags&lt;/FONT&gt;.Pixel, 0x40);&lt;BR&gt;&amp;nbsp;&amp;nbsp;s2.SetCollideable(&lt;FONT color=#000080&gt;true&lt;/FONT&gt;, &lt;FONT color=#0000ff&gt;XSpriteManager&lt;/FONT&gt;.&lt;FONT color=#0000ff&gt;CollisionFlags&lt;/FONT&gt;.Pixel, 0x40);&lt;/FONT&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;where 0x40 is the alpha value of the sprite that defines the collideable part of the sprite - any alpha value &amp;gt;= this value will be added to the sprite's collision mask.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;(5) In your Update method, after you've moved&amp;nbsp;your sprites around a bit, you can check for collisions using CheckSpriteCollisions:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;List&lt;/FONT&gt;&amp;lt;&lt;FONT color=#0000ff&gt;XSpriteManager&lt;/FONT&gt;.&lt;FONT color=#0000ff&gt;SpriteCollision&lt;/FONT&gt;&amp;gt; aColl = m_mgrSprites.CheckSpriteCollisions();&lt;/FONT&gt;&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;This method returns a list of collisions that were detected. It returns null if there are no collisions.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;(6) To handle collisions, simply walk the list of collisions and do whatever you feel is appropriate.&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&lt;FONT color=#000080&gt;if&lt;/FONT&gt; (aColl != &lt;FONT color=#000080&gt;null&lt;/FONT&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// handle the collisions&lt;BR&gt;&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#000080&gt;foreach&lt;/FONT&gt; (&lt;FONT color=#0000ff&gt;XSpriteManager&lt;/FONT&gt;.&lt;FONT color=#0000ff&gt;SpriteCollision&lt;/FONT&gt; c &lt;FONT color=#000080&gt;in&lt;/FONT&gt; aColl)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// if colliding with another sprite...&lt;BR&gt;&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;FONT color=#000080&gt;if&lt;/FONT&gt; (c.Type == &lt;FONT color=#0000ff&gt;XSpriteManager&lt;/FONT&gt;.&lt;FONT color=#0000ff&gt;CollisionType&lt;/FONT&gt;.Sprite)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;BR&gt;&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // handle&amp;nbsp;collision between c.Sprite and c.Sprite2&lt;BR&gt;&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp; }&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;A working demo of collision detection is given in the CollisionDemo project included with the &lt;A href="http://blogs.msdn.com/garykac/articles/749188.aspx"&gt;XNAExtras download&lt;/A&gt;.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=769335" width="1" height="1"&gt;</content><author><name>garykac</name><uri>http://blogs.msdn.com/members/garykac.aspx</uri></author><category term="XNA" scheme="http://blogs.msdn.com/garykac/archive/tags/XNA/default.aspx" /></entry><entry><title>XNAExtras build 0923 release</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/garykac/archive/2006/09/23/768903.aspx" /><id>http://blogs.msdn.com/garykac/archive/2006/09/23/768903.aspx</id><published>2006-09-24T09:50:00Z</published><updated>2006-09-24T09:50:00Z</updated><content type="html">&lt;P&gt;Major addition for this version: collision detection has been added to XSpriteManager. Both bounding box and pixel based (mix-n-match sprites of different types). Also boundary collisions. These are demoed in the bouncy CollisionDemo example:&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/photos/garykac/images/768840/original.aspx"&gt;&lt;IMG src="http://blogs.msdn.com/photos/garykac/images/768840/473x375.aspx"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;From the release notes:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;(BMFontGen) Fixed bug where including undefined chars in your font -range would cause a crash&lt;BR&gt;(BitmapFont) Changed loading embedded resources - now the resource name is specified in the same format as file-based resources&lt;BR&gt;(BitmapFont) Fixed bug where font files wouldn't be found unless they were in a subdirectory&lt;BR&gt;(TextBox) Added accessors for the text string&lt;BR&gt;(XSpriteManager) Changed default FPS to 60&lt;BR&gt;(XSpriteManager) Added support for collisions&lt;BR&gt;(TexturePool) *Really* fixed bug in AddTexture(string,Color) where the texture wasn't being created if the GraphicsDevice already existed - the fix got lost for the last release&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P dir=ltr&gt;&lt;EM&gt;Thanks to redwyre, David Zakar (DMZ), Martin Szinger&amp;nbsp;and Matt Moore for comments/suggestions.&lt;/EM&gt;&lt;/P&gt;
&lt;P dir=ltr&gt;You can download the&amp;nbsp;0923 build of XNAExtras&amp;nbsp;&lt;A href="http://blogs.msdn.com/garykac/articles/749188.aspx"&gt;here&lt;/A&gt;.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=768903" width="1" height="1"&gt;</content><author><name>garykac</name><uri>http://blogs.msdn.com/members/garykac.aspx</uri></author><category term="XNA" scheme="http://blogs.msdn.com/garykac/archive/tags/XNA/default.aspx" /></entry><entry><title>Mixing Natural Language into Games</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/garykac/archive/2006/09/22/767359.aspx" /><id>http://blogs.msdn.com/garykac/archive/2006/09/22/767359.aspx</id><published>2006-09-23T08:01:00Z</published><updated>2006-09-23T08:01:00Z</updated><content type="html">&lt;P&gt;&lt;EM&gt;[I had intended to write up a small post about my project earlier, but didn't get the chance until now. Hopefully, you'll find it at least part of it interesting. -Gary]&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;Being in the Natural Language Processing group here in Microsoft Research, and being someone who enjoys creating and playing games, one of my interests is to explore the intersection between these two areas. &lt;/P&gt;
&lt;P&gt;I started by experimenting with attaching semantic annotations to virtual photographs - photos taken by the player within the virtual world. The player could take a photograph and then bring the photo to an NPC in the world and have a (somewhat stunted) "conversation" about the contents of the photo. A key aspect of this work is that all of the interactions are dynamically generated during runtime - there is no scripted dialog. A basic description and overview of this work is given in &lt;A href="http://research.microsoft.com/nlp/publications/ijcnlp05-kacmarcik.pdf"&gt;"Multi-Modal Question-Answering: Questions without Keyboards" [IJCNLP 2005]&lt;/A&gt;. &lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://research.microsoft.com/nlp/publications/ijcnlp05-kacmarcik-poster.pdf"&gt;&lt;IMG src="http://blogs.msdn.com/photos/garykac/images/767319/original.aspx"&gt; &lt;/A&gt;&lt;/P&gt;
&lt;P&gt;One of the problems that I encountered with this project was the high cost of creating 3D assets (where's the Content Pipeline when you need it?), so I converted to a more conventional tile-based isometric role-playing game. I still needed to create art assets, but found that it was much easier to create 2D sprites than to create models, textures and the other bits required for a decent-looking 3D world. This allowed me to focus less time on the art (which is fun, but not the key point of the game) and more on the dialog and NPC-interaction aspects of the game.&lt;/P&gt;
&lt;P&gt;Here is a&amp;nbsp;screenshot from a game demo (called "PotionMaster") showing some of the dynamically generated dialog elements (apologies for the "programmer art" ^_^):&amp;nbsp;&lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://blogs.msdn.com/photos/garykac/images/767322/original.aspx"&gt;&lt;IMG src="http://blogs.msdn.com/photos/garykac/images/767322/500x306.aspx"&gt; &lt;/A&gt;&lt;/P&gt;
&lt;P&gt;More details about this game are given in&amp;nbsp;&lt;A href="http://research.microsoft.com/nlp/publications/aiide06_kacmarcik.pdf"&gt;"Using Natural Language to Manage NPC Dialog" [AIIDE 2006]&lt;/A&gt; and (in an earlier form)&amp;nbsp;in &lt;A href="http://research.microsoft.com/nlp/publications/AAAI05-QAinRPGs.pdf"&gt;"Question-Answering in Role-Playing Games" [AAAI 2005]&lt;/A&gt;. &lt;/P&gt;
&lt;P align=center&gt;&lt;A href="http://research.microsoft.com/nlp/publications/aiide06_kacmarcik_poster.pdf"&gt;&lt;IMG src="http://blogs.msdn.com/photos/garykac/images/767320/original.aspx"&gt; &lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Unfortunately, I cannot release this game in its complete form. It relies on some internal-only NLP tools during runtime (to dynamically generate the NPC responses from the abstract semantic representations), and those components cannot be released (not even in binary form).&lt;/P&gt;
&lt;P&gt;To work around this limitation, I've defined an interface between the core game engine and our dialog engine. This way I can release the game engine and keep our proprietary dialog system in-house. There may seem like no point in releasing only half of a game, but the purpose&amp;nbsp;is&amp;nbsp;so that other NL researchers can plug-in their own dialog systems and run situated evaluations without having to create an entire game from scratch. I've also created a very simple scripted dialog plug-in that takes the place of our internal backend (so the game will be playable).&lt;/P&gt;
&lt;P&gt;So, that's the project in a nutshell. When XNA was released, I expanded the scope slightly so that the game code could be used as a tutorial for creating isometric games. The XNAExtras that you've seen so far are the first of these releases.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;[Update: All of my papers (including those mentioned above) are listed on &lt;/EM&gt;&lt;A href="http://research.microsoft.com/~garykac/"&gt;&lt;EM&gt;my research homepage&lt;/EM&gt;&lt;/A&gt;&lt;EM&gt;.]&lt;/EM&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=767359" width="1" height="1"&gt;</content><author><name>garykac</name><uri>http://blogs.msdn.com/members/garykac.aspx</uri></author><category term="Games" scheme="http://blogs.msdn.com/garykac/archive/tags/Games/default.aspx" /><category term="NLP" scheme="http://blogs.msdn.com/garykac/archive/tags/NLP/default.aspx" /></entry><entry><title>Separating your code and data</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/garykac/archive/2006/09/17/759249.aspx" /><id>http://blogs.msdn.com/garykac/archive/2006/09/17/759249.aspx</id><published>2006-09-17T20:15:00Z</published><updated>2006-09-17T20:15:00Z</updated><content type="html">&lt;P&gt;In the &lt;A href="http://blogs.msdn.com/garykac/archive/2006/09/16/758576.aspx"&gt;previous post&lt;/A&gt;, I talked about creating border art and using it in your game. One problem with the approach shown is that&amp;nbsp;the description of the texture contents - the sprite locations and boundaries - is stored in the game code. This means that if you want to&amp;nbsp;update the border artwork for a future version of your game, you need to make parallel code modifications&amp;nbsp;and then recompile.&lt;/P&gt;
&lt;P&gt;A&amp;nbsp;nicer way of doing this is to keep the description of the texture contents in a file alongside the texture. This would allow you to change the appearance of your game without needing to recompile - useful if you're programming by yourself, and crucial if you're developing the game where someone else is helping out with the artwork.&lt;/P&gt;
&lt;P&gt;This approach is supported in the XNAExtras class library by allowing texture and sprite information to be loaded from an XML file. A simple descriptor file is:&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;lt;?xml &lt;FONT color=#ff0000&gt;version&lt;/FONT&gt;=&lt;FONT color=#0000ff&gt;"1.0"&lt;/FONT&gt; &lt;FONT color=#ff0000&gt;encoding&lt;/FONT&gt;=&lt;FONT color=#0000ff&gt;"UTF-8"&lt;/FONT&gt; ?&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;lt;texinfo&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;lt;textures&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;texture &lt;FONT color=#ff0000&gt;name&lt;/FONT&gt;=&lt;FONT color=#0000ff&gt;"whiteball"&lt;/FONT&gt; &lt;FONT color=#ff0000&gt;src&lt;/FONT&gt;=&lt;FONT color=#0000ff&gt;"white ball.png"&lt;/FONT&gt; &lt;FONT color=#ff0000&gt;size&lt;/FONT&gt;=&lt;FONT color=#0000ff&gt;"64x64"&lt;/FONT&gt; /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/textures&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;lt;sprites&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;sprite &lt;FONT color=#ff0000&gt;name&lt;/FONT&gt;=&lt;FONT color=#0000ff&gt;"red"&lt;/FONT&gt; &lt;FONT color=#ff0000&gt;tex&lt;/FONT&gt;=&lt;FONT color=#0000ff&gt;"whiteball"&lt;/FONT&gt; &lt;FONT color=#ff0000&gt;pos&lt;/FONT&gt;=&lt;FONT color=#0000ff&gt;"50,50"&lt;/FONT&gt; &lt;FONT color=#ff0000&gt;tint&lt;/FONT&gt;=&lt;FONT color=#0000ff&gt;"#ff0000"&lt;/FONT&gt; /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/sprites&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;lt;/texinfo&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;This XML file creates a single sprite based on the "white ball.png" texture, adds a red tint and positions the sprite at (50,50). While perhaps a bit of overkill for this simple texture, once you start having multiple sprites in the same texture (as you should), these descriptor files can be quite useful.&lt;/P&gt;
&lt;P&gt;To load a texture definition file into your game, simply use:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;sprites.LoadSprites(&lt;FONT color=#ff0000&gt;"spriteinfo.xml"&lt;/FONT&gt;);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Where &lt;FONT face="Courier New" size=2&gt;sprites&lt;/FONT&gt; is your game's XSpriteManager. If you want to interact with this sprite in your code (for example, to move it around the screen), you can ask the XSpriteManager to return a reference to it using:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp; &lt;FONT color=#0000ff&gt;XSprite&lt;/FONT&gt; s = sprites.GetSprite(&lt;FONT color=#ff0000&gt;"red"&lt;/FONT&gt;) &lt;FONT color=#000080&gt;as&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;XSprite&lt;/FONT&gt;;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;You can find working examples of LoadSprites in the TextBoxDemo and XSpritesDemo projects (included with the XNAExtras download).&lt;/P&gt;
&lt;P align=center&gt;&lt;IMG src="http://blogs.msdn.com/photos/garykac/images/759301/original.aspx"&gt;&lt;/P&gt;
&lt;P&gt;To assist with creating these "texture information" files, I've created an XML Schema Definition (XSD) file that you can use to perform basic validation. This XSD file (TextureInfo.xsd) is included as part of XNAExtras and is located in the "XML Schema" directory. To use it, copy the XSD file into the same directory as your XML file and replace your&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;lt;texinfo&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;tag at the beginning of the file with the following mess:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;lt;texinfo&lt;BR&gt;&amp;nbsp;&amp;nbsp;xmlns="http://xna.microsoft.com/textureinfo"&lt;BR&gt;&amp;nbsp;&amp;nbsp;xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;BR&gt;&amp;nbsp;&amp;nbsp;xsi:schemaLocation="http://xna.microsoft.com/textureinfo textureinfo.xsd"&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Now if you open your XML file in a application that supports XSD (like Visual C# Express), you'll get validation squiggles. It doesn't perform a complete validation of the file, but it will catch most basic errors/typos. If you want to keep the XSD files in a separate directory, replace "textureinfo.xsd" in the "xsi:schemaLocation" attribute with a path+filename.&lt;/P&gt;
&lt;P align=center&gt;&lt;IMG src="http://blogs.msdn.com/photos/garykac/images/759301/original.aspx"&gt;&lt;/P&gt;
&lt;P&gt;Beyond making your code more manageable, there's another aspect to this code/data separation that can benefit your work: Your art assets become more shareable with others. If you're thinking "Why would I want to make it easier for people to steal my art?", try to step back and think about the XNA gaming community as a whole.&lt;/P&gt;
&lt;P&gt;While it means that others can more easily make use of your assets, it also means that you can more easily make use of the assets that others create. This sharing is crucial to developing and maintaining a thriving game development community. Yes, some people will "steal" and not give credit, but that sort of thing will happen no matter what you do (unless you don't release your game at all).&lt;/P&gt;
&lt;P&gt;As mentioned earlier, exposing your art like this makes it much easier to be replaced/updated. While this is obviously good for you, it can&amp;nbsp;also enable a modding community to build up around your game - people (even those with no programminng experience) can now take your game and make new skins without messing with the code. How cool would that be?&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=759249" width="1" height="1"&gt;</content><author><name>garykac</name><uri>http://blogs.msdn.com/members/garykac.aspx</uri></author><category term="XNA" scheme="http://blogs.msdn.com/garykac/archive/tags/XNA/default.aspx" /></entry><entry><title>Creating UI border elements in XNA</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/garykac/archive/2006/09/16/758576.aspx" /><id>http://blogs.msdn.com/garykac/archive/2006/09/16/758576.aspx</id><published>2006-09-17T08:30:00Z</published><updated>2006-09-17T08:30:00Z</updated><content type="html">&lt;P&gt;The XNAExtras.Border class provides a general border mechanism for UI elements. While currently only the XNAExtras.TextBox class makes use of it, future releases of XNAExtras will include Menus and perhaps some other elements that will be built on top of Borders.&lt;/P&gt;
&lt;P&gt;When creating borders, you can use the default border graphics (e.g., those that come with the TextBox demo) or you can&amp;nbsp;create your own&amp;nbsp;custom graphics. This post describes what you need to do to create and use your own custom borders.&lt;/P&gt;
&lt;P&gt;As an example, we'll make use of one of the borders included in the TextBoxDemo sample project. This project is part of the XNAExtras package, which you can download from &lt;A href="http://blogs.msdn.com/garykac/articles/749188.aspx"&gt;here&lt;/A&gt; if you don't already have it.&lt;/P&gt;
&lt;P&gt;The border image that we'll be examining is "border.png" - a simple 25x33 image that contains a single border. It's located in the "XNA Samples\TextBoxDemo\Content" folder and is shown in the following figure (with some markup denoting the different regions of the border image):&lt;/P&gt;
&lt;TABLE align=center&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;IMG src="http://blogs.msdn.com/photos/garykac/images/758274/original.aspx"&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;When designing a border image, you should&amp;nbsp;think of it as 9 separate regions that need to blend together smoothly: the four corners, four edges and the center.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;The four corners are typically the largest and most distinctive part of any border. The corners are never stretched or scaled when they are drawn.&lt;/LI&gt;
&lt;LI&gt;The edges are drawn between two neighboring corners and stretch vertically or horizontally to make the border the correct size. As can be seen in "border.png", the edges do not need to be more than a single pixel wide or high.&lt;/LI&gt;
&lt;LI&gt;The center is typically a single pixel that defines the background color for the border. The center is stretched both horizontally and vertically to match the border size.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;So, now that you have a border image, what do you do with it? You can use the following code to create and display your border.&lt;/P&gt;
&lt;P&gt;First, set up your project. This process is the same for all XNA projects that use XNAExtras.&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Create a new "Windows Game (XNA)" project and add all of the&amp;nbsp;XNAExtras source files&amp;nbsp;to it.&lt;/LI&gt;
&lt;LI&gt;Add a reference to System.Xml. To do this, right-click on the References folder in the Solution Explorer for your project. Select "Add Reference...". From the ".NET" tab, select "System.Xml" and then click the "Add" button.&lt;/LI&gt;
&lt;LI&gt;Add "using XNAExtras;" to the top of your source files with the other using statements.&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Now you can start adding code to the main game class. Add the following member variable to your game class:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;private&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;XSpriteManager&lt;/FONT&gt; m_sprites;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Add the following initialization code:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// create a sprite manager to manage the drawing&lt;BR&gt;&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;m_sprites = &lt;FONT color=#000080&gt;new&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;XSpriteManager&lt;/FONT&gt;();&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// load the texture that contains the border&lt;BR&gt;&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;m_sprites.AddTexture(&lt;FONT color=#ff0000&gt;"tx_border"&lt;/FONT&gt;, &lt;FONT color=#ff0000&gt;"border.png"&lt;/FONT&gt;, 25, 33);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// define a border type from the texture&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;(use the default settings to init the border)&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;m_sprites.DefineBorder(&lt;FONT color=#ff0000&gt;"border_def"&lt;/FONT&gt;, &lt;FONT color=#ff0000&gt;"tx_border"&lt;/FONT&gt;);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&lt;FONT color=#008000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;// instantiate the border and set its size&lt;BR&gt;&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;Border&lt;/FONT&gt; b = m_sprites.AddBorder(&lt;FONT color=#ff0000&gt;"border test"&lt;/FONT&gt;, &lt;FONT color=#ff0000&gt;"border_def"&lt;/FONT&gt;);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;b.SetDestRect(50,50,100,100);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Add the following initialization code after the call to InitializeComponent (or place it wherever you handle device resets):&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;m_sprites.Reset(graphics.GraphicsDevice);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;And finally, add the following to your Draw routine (between your BeginScene and your EndScene):&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;m_sprites.Draw();&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Compile and run and you'll see a empty border on your screen. You'll need to have copied the "border.png" file into the same directory as the EXE or else the texture won't be found.&lt;/P&gt;
&lt;P&gt;Note that the code given above uses the default parameters to define the border, which works in this example because the texture contained only this one border sprite. The left, top, right and bottom values for the border were also automatically determined by taking the image size and dividing it in half and assuming that the center was 1x1 pixels in size.&lt;/P&gt;
&lt;P&gt;To have more control over the border creation parameters, you need to define the border using a Border.CreationParameters struct:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color=#0000ff&gt;Border&lt;/FONT&gt;.&lt;FONT color=#0000ff&gt;CreationParameters&lt;/FONT&gt; bcp = new &lt;FONT color=#0000ff&gt;Border&lt;/FONT&gt;.&lt;FONT color=#0000ff&gt;CreationParameters&lt;/FONT&gt;();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;bcp.strTexName = &lt;FONT color=#ff0000&gt;"tx_border"&lt;/FONT&gt;;&lt;FONT color=#008000&gt;// name of&amp;nbsp;texture with border&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;bcp.SetLocation(0, 0);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#008000&gt;// location of border image in texture&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;bcp.SetSize(25, 33);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#008000&gt;// size of border image&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;bcp.SetEdges(12, 16, 12, 16);&lt;FONT color=#008000&gt;// size of LTRB edges in texture&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;bcp.SetOrigin(4, 8);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#008000&gt;// border position&amp;nbsp;adjustment&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;m_sprites.DefineBorder(&lt;FONT color=#ff0000&gt;"border_def"&lt;/FONT&gt;, bcp);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;As a final&amp;nbsp;comment about borders,&amp;nbsp;note the SetOrigin line in the above example.&amp;nbsp;This parameter is used to adjust the position of the border around the rectangle. Compare the borders in the next image:&lt;/P&gt;
&lt;TABLE align=center&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;&lt;IMG src="http://blogs.msdn.com/photos/garykac/images/758339/original.aspx"&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;The left column shows the border and the right column shows the same border with the content rectangle blanked out to make it easier to see. All of the rectangles are 100x100, but the bottom row used the SetOrigin method shown above to pull the border closer to the rectangle.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=758576" width="1" height="1"&gt;</content><author><name>garykac</name><uri>http://blogs.msdn.com/members/garykac.aspx</uri></author><category term="XNA" scheme="http://blogs.msdn.com/garykac/archive/tags/XNA/default.aspx" /></entry><entry><title>XNAExtras build 0916 release</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/garykac/archive/2006/09/16/757867.aspx" /><id>http://blogs.msdn.com/garykac/archive/2006/09/16/757867.aspx</id><published>2006-09-16T20:01:00Z</published><updated>2006-09-16T20:01:00Z</updated><content type="html">&lt;P&gt;This release includes a bunch of small enhancements and bug fixes. The only major class addition is XSpriteGroup, which allows you to manipulate a group of sprites as a single unit.&lt;/P&gt;
&lt;P&gt;From the release notes:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;(XML Schema) Added XML schema definition (XSD) files for bitmap and texture files&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;(BMFontGen) Fixed bug where custom glyphs couldn't replace chars that didn't exist in font&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;(BitmapFont) Added Dispose method&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;(BitmapFont) Fixed TextBox to format the string only once&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;(BitmapFont) Allow fonts to be loaded from embedded resources&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;(BitmapFont/XSpriteManager) Changed GetXMLAttribute to not throw exceptions&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;(XSpriteManager) Changed sprites to sort by order of creation when at the same depth&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;(XSpriteBase) Added Visible property&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;(XSprite) Added SetTexture method&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;(XSprite) Expose sprite alpha value directly&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;(TexturePool) Fixed bug in AddTexture(string,Color) where the texture wasn't being created if the GraphicsDevice already existed&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Thanks to everyone (and especially to David Zakar (DMZ), redwyre and Martin Szinger) who took the time to send comments, bug reports and feature requests.&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;[&lt;STRONG&gt;Update&lt;/STRONG&gt;: Oops! Björn points out that I forgot the link to the updated version. The link to the latest version is &lt;A href="http://blogs.msdn.com/garykac/articles/749188.aspx"&gt;here&lt;/A&gt;.]&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=757867" width="1" height="1"&gt;</content><author><name>garykac</name><uri>http://blogs.msdn.com/members/garykac.aspx</uri></author><category term="XNA" scheme="http://blogs.msdn.com/garykac/archive/tags/XNA/default.aspx" /></entry><entry><title>"But I don't want to have to worry about sprite depths..."</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/garykac/archive/2006/09/14/749911.aspx" /><id>http://blogs.msdn.com/garykac/archive/2006/09/14/749911.aspx</id><published>2006-09-15T02:34:00Z</published><updated>2006-09-15T02:34:00Z</updated><content type="html">&lt;P&gt;Well, you don't have to really. Or maybe you're already dealing with depth and you don't realize it.&lt;/P&gt;
&lt;P&gt;To recap: There are two ways of controlling sprite "depth". The first is to use the SpriteBatch.Draw methods that allow a layerDepth parameter. The second is just to draw your sprites at the same depth, but from back to front.&lt;/P&gt;
&lt;P&gt;The layerDepth approach is nice when you have lots of sprites at different depths, or when they're changing depths regularly. You give each sprite&amp;nbsp;a depth and then forget about it. This allows you to draw your objects ordered by type (first the map, then the player, then the objects, ...) as opposed to by how far they are&amp;nbsp;into the screen. &lt;/P&gt;
&lt;P&gt;The simpler approach of drawing from back to front is seen when&amp;nbsp;you draw your background first, then your objects and then finish up with your overlay and UI elements.&amp;nbsp;Basically, you've hardcoded your back-to-front sort order in your code. Not very flexible perhaps, but perfectly appropriate for a large number of games. And you don't have to worry about depth at all - beyond the coarse background/objects/overlay distinction.&lt;/P&gt;
&lt;P&gt;XSpriteManager supports both approaches. If you give it a depth, the right thing will happen - and the sprites will be kept in sorted order so that they render quickly. But if&amp;nbsp;you don't want to set the depth, you can just&amp;nbsp;add sprites and they will be rendered in the order that they&amp;nbsp;were created. By default, XSprites are drawn at depth=0.0 (which is closest to the screen).&lt;/P&gt;
&lt;P&gt;The motivation for all this is the game that I'm working on (big surprise there, eh?). It's a basic tile-based isometric RPG which had a definite need for a class to manage all the sprites. To handle the map tiles, I wanted to put each row at a different depth and then place the player (and NPCs) at depths between the rows.&lt;/P&gt;
&lt;P&gt;I'll try to talk more about this game once I get a few more basic classes finished up.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=749911" width="1" height="1"&gt;</content><author><name>garykac</name><uri>http://blogs.msdn.com/members/garykac.aspx</uri></author><category term="XNA" scheme="http://blogs.msdn.com/garykac/archive/tags/XNA/default.aspx" /></entry></feed>