<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>I Wanted Orange</title>
	<atom:link href="http://technofovea.com/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://technofovea.com/blog</link>
	<description>(The machine would not make a mistake.)</description>
	<lastBuildDate>Fri, 02 Sep 2011 06:40:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Hardware failure: Need to RMA my video card.</title>
		<link>http://technofovea.com/blog/archives/966</link>
		<comments>http://technofovea.com/blog/archives/966#comments</comments>
		<pubDate>Fri, 02 Sep 2011 06:40:25 +0000</pubDate>
		<dc:creator>Darien</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[hardware]]></category>

		<guid isPermaLink="false">http://technofovea.com/blog/?p=966</guid>
		<description><![CDATA[Well, it seems my graphics card (which has been limping along for years with intermittent glitches under load) has finally given up the ghost and my computer will no longer boot. Fortunately, this occurred after I finished wringing many hours of enjoyment and completionism from Deus Ex: Human Revolution, or else I would feel incredibly [...]]]></description>
			<content:encoded><![CDATA[<p>Well, it seems my graphics card (which has been limping along for years with intermittent glitches under load) has finally given up the ghost and my computer will no longer boot. Fortunately, this occurred after I finished wringing many hours of enjoyment and completionism from Deus Ex: Human Revolution, or else I would feel incredibly annoyed at the interruption. (Aside: It&#8217;s a <em>good</em> game. A worthy successor to Deus Ex.)</p>
<p>Since the card (an Nvidia 8800GT variant) is still decently-powerful and has no obvious damage, I&#8217;m going to see what I can do under the limited-lifetime warranty. Compared to its earlier foibles, RMAing now ought to be unambiguous and straightforward, given that the computer now refuses to even POST if the card is present.</p>
]]></content:encoded>
			<wfw:commentRss>http://technofovea.com/blog/archives/966/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Graph Design Blues</title>
		<link>http://technofovea.com/blog/archives/961</link>
		<comments>http://technofovea.com/blog/archives/961#comments</comments>
		<pubDate>Thu, 11 Aug 2011 07:19:42 +0000</pubDate>
		<dc:creator>Darien</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[packbsp]]></category>

		<guid isPermaLink="false">http://technofovea.com/blog/?p=961</guid>
		<description><![CDATA[I&#8217;m having second-thoughts on how to manage the dependency graph(s). I&#8217;ve been experimenting with a &#8220;directed multigraph&#8221;, but I worry that it adds too much complexity when it comes to determining what portions of it are connected when only a certain type of edge is considered, and whether I&#8217;m over-complicating things. Actually, I&#8217;m pretty sure [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m having second-thoughts on how to manage the dependency graph(s). I&#8217;ve been experimenting with a &#8220;directed multigraph&#8221;, but I worry that it adds too much complexity when it comes to determining what portions of it are connected when only a certain type of edge is considered, and whether I&#8217;m over-complicating things. Actually, I&#8217;m pretty sure I <em>am</em> over-complicating things, but freedom to experiment is part of what makes an independent project fun.</p>
<p><span id="more-961"></span></p>
<p>The real problem is this: What kind of information might be needed to analyze a node and add its children, and in what order do you do that? Every node needs to be visited, but what about every incoming edge, or every path? Using a multi-graph is making it difficult to reason out a correct and deterministic traversal order, particularly when it comes to preventing cycles. In particular,  cycles which may be valid in the graph as long as they require two-or-more edge types to exist!</p>
<p>I&#8217;m wondering now if&#8211;despite being an interesting experiment&#8211;I ought to restructure things as a collection of graphs bound together in a &#8220;Graph Project&#8221;. The unifying project would serve to de-duplicate nodes, provided nodes are all immutable data-holders.</p>
<p>You may be wondering why de-duplication is important, if nodes are immutable and have a good <em>equals()</em> implementation. The answer is Weak References. I want to allow NodeHandler implementations to store arbitrary information about what nodes they&#8217;ve already seen, so that they can avoid duplication of effort when necessary. For example, the same material file may have the same texture dependencies, whether it occurs in the graph for Map A or the one for Map B. If there are two separate Node instances which are <em>equal()</em> to one another,  WeakHashMap can only reliably store one of them.</p>
<p>To solve this problem, I&#8217;m considering setting up a system where NodeHandler instances register themselves as listeners to a Graph Project, so that they can store a hard reference instead, and are informed when they can safely forget it due to the Node being removed.</p>
]]></content:encoded>
			<wfw:commentRss>http://technofovea.com/blog/archives/961/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Profiles loading, now integrating new dependency graph</title>
		<link>http://technofovea.com/blog/archives/956</link>
		<comments>http://technofovea.com/blog/archives/956#comments</comments>
		<pubDate>Wed, 03 Aug 2011 08:03:44 +0000</pubDate>
		<dc:creator>Darien</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[packbsp]]></category>

		<guid isPermaLink="false">http://technofovea.com/blog/?p=956</guid>
		<description><![CDATA[PackBSP&#8217;s profile-loading (a nested Spring ApplicationContext, really) is well underway, but I&#8217;m adding another level of indirection (some data-holding classes) to avoid too tight of an integration with certain HL2Parse innards. My main goal right now is to geta build which reproduces most of the current dependency-crawling features, and then worry later about how components [...]]]></description>
			<content:encoded><![CDATA[<p>PackBSP&#8217;s profile-loading (a nested Spring ApplicationContext, really) is well underway, but I&#8217;m adding another level of indirection (some data-holding classes) to avoid too tight of an integration with certain HL2Parse innards. My main goal right now is to geta build which reproduces most of the current dependency-crawling features, and then worry later about how components are going to merge/override specific configuration data, like recognized shader parameters.</p>
<p>This will also mean integrating and testing the new dependency-graph classes, which unlike the old version are able to model crawling multiple maps at once, where each map may potentially have its own copy of a named asset in its pakfile. This is done by allowing multiple edges in the graph (directed acyclic multigraph) where each edge corresponds to the context of a particular map. In this way most nodes will be shared across maps (avoiding duplication of effort) but differences can still be modeled by having certain nodes only connected through map-specific edges.</p>
]]></content:encoded>
			<wfw:commentRss>http://technofovea.com/blog/archives/956/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Configuration solution?</title>
		<link>http://technofovea.com/blog/archives/954</link>
		<comments>http://technofovea.com/blog/archives/954#comments</comments>
		<pubDate>Sun, 24 Jul 2011 19:59:22 +0000</pubDate>
		<dc:creator>Darien</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[packbsp]]></category>

		<guid isPermaLink="false">http://technofovea.com/blog/?p=954</guid>
		<description><![CDATA[It&#8217;s still very much in the prototyping phase, but I think I have a long-term way for PackBSP to hit the right mix of reliability and customization it may need long-term. Key word? &#8220;Profiles&#8221;. Development kits (or &#8220;devkits&#8221;) are something that needs a new version of PackBSP to add. So if Valve someday releases an [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s still very much in the prototyping phase, but I think I have a long-term way for PackBSP to hit the right mix of reliability and customization it may need long-term. Key word? &#8220;Profiles&#8221;.</p>
<p><span id="more-954"></span></p>
<ol>
<li>Development kits (or &#8220;devkits&#8221;) are something that needs a new version of PackBSP to add. So if Valve someday releases an &#8220;Episode 3 Development Kit&#8221;, there will need to be a new version of PackBSP which is able to determine whether someone has it installed on their computer and how to interpret the way it is set up. Fortunately, this should be infrequent.</li>
<li>The modeling for devkits will also include the games which are set up to be used in them. Notably, this includes the information Hammer uses from FGD files, which determine how users pick models and entity-textures.</li>
<li>In parallel, there will be a system of &#8220;Profiles&#8221;, which are essentially sets of Spring configurations and properties. To start work, a user must pick both the devkit option, and also the profile that will be used. Profiles can contain information restricting themselves to certain devkits.</li>
</ol>
<p>Now, it is entirely possible for a user to pick the &#8220;Team Fortress 2&#8243; option from the Source-SDK devkit, and then combine it with the &#8220;Counter-strike Source&#8221; profile, but this is unavoidable, since the effort of accurately cataloging and fingerprinting every SDK option as games are constantly patched is daunting at best.</p>
<p>The big benefit is that profiles are largely text-editable. They may refer to specific Java classes to use, but it is possible for savvy mappers to create their a profile and share it to allow PackBSP to handle a new mod or new features added to a game.</p>
]]></content:encoded>
			<wfw:commentRss>http://technofovea.com/blog/archives/954/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Configuration Confusion</title>
		<link>http://technofovea.com/blog/archives/949</link>
		<comments>http://technofovea.com/blog/archives/949#comments</comments>
		<pubDate>Tue, 12 Jul 2011 23:54:21 +0000</pubDate>
		<dc:creator>Darien</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[packbsp]]></category>

		<guid isPermaLink="false">http://technofovea.com/blog/?p=949</guid>
		<description><![CDATA[Well, Source-descended games have me stumped. There&#8217;s a bunch of a variation in behavior between them (consider L4D2 campaign creation versus Portal 2&#8242;s map transitions) and I&#8217;m trying to find the right technique to make PackBSP work differently depending on what the user has selected&#8230; Even assuming I can correctly identify the features of what [...]]]></description>
			<content:encoded><![CDATA[<p>Well, Source-descended games have me stumped. There&#8217;s a bunch of a variation in behavior between them (consider L4D2 campaign creation versus Portal 2&#8242;s map transitions) and I&#8217;m trying to find the right technique to make PackBSP work differently depending on what the user has selected&#8230; Even assuming I can correctly identify the features of what they picked.</p>
<p>Sometimes that means little things like specifically looking for certain entities that aren&#8217;t listed in the FGD files. Other times it almost means changing what GUI a user will see.  Creating completely different &#8220;editions&#8221; of PackBSP seems like it would lead to its own difficulties keeping everything updated, so I&#8217;m hoping to find some solution with the Spring framework. I considered the Apache Commons-Configuration library for a while, but I really do need the ability to swap out different code and wiring as opposed to key/value settings.</p>
<p>This gets a little weirder when you consider how to handle new mods. Should it limp along, treating &#8220;Mod X&#8221; as if it were the same as default Half Life? How easy would it be to add support for Mod X? How would the program recognize it if the authors did a revamp and released &#8220;Mod X 1.5&#8243;?</p>
<p>Perhaps the best solution is to mostly divorce the detection of games from the identification of games. So the user sees that they can pick &#8220;Zombie Shooterz&#8221; as a game, but it is up to them to tell PackBSP to use the &#8220;Half Life 2 Episode 2&#8243; setting, or the &#8220;L4D2&#8243; setting, depending on what code-base the game is built from.</p>
]]></content:encoded>
			<wfw:commentRss>http://technofovea.com/blog/archives/949/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Locked files on windows&#8230; Bah!</title>
		<link>http://technofovea.com/blog/archives/946</link>
		<comments>http://technofovea.com/blog/archives/946#comments</comments>
		<pubDate>Fri, 24 Jun 2011 06:56:57 +0000</pubDate>
		<dc:creator>Darien</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[packbsp]]></category>

		<guid isPermaLink="false">http://technofovea.com/blog/?p=946</guid>
		<description><![CDATA[It seems that Steam can sometimes have an exclusive lock on the clientregistry.blob file, which keeps anybody else from reading it in just about any way. This is an inconvenience since it means PackBSP cannot read the data it needs about game-assets. I&#8217;ve been looking into using JNI with the Microsoft Volume Shadow Service, but [...]]]></description>
			<content:encoded><![CDATA[<p>It seems that Steam can sometimes have an exclusive lock on the clientregistry.blob file, which keeps anybody else from reading it in just about any way. This is an inconvenience since it means PackBSP cannot read the data it needs about game-assets. I&#8217;ve been looking into using JNI with the Microsoft Volume Shadow Service, but not only is it quite a bit out of my comfort zone in C/C++, but there may be licensing issues that would make it very difficult to put the functionality into an open-source project.</p>
<p>It might be easier to lobby Valve for a workaround, like having Steam periodically attempt to dump a copy to some other filename.</p>
<p>In the meantime, simply turn off Steam, start PackBSP, choose the game you want to pack for, and then restart Steam before you reach the actual altering-the-BSP step.</p>
]]></content:encoded>
			<wfw:commentRss>http://technofovea.com/blog/archives/946/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Deus Ex, PackBSP progress</title>
		<link>http://technofovea.com/blog/archives/940</link>
		<comments>http://technofovea.com/blog/archives/940#comments</comments>
		<pubDate>Wed, 15 Jun 2011 05:29:51 +0000</pubDate>
		<dc:creator>Darien</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://technofovea.com/blog/?p=940</guid>
		<description><![CDATA[Still alive, working on PackBSP when not creatively-drained from work. I may end up skipping past a few version numbers to represent all the rewriting going on. Among other initiatives: Some sort of system to handle packing multiple maps at once, in order to support the VPK/campaign workflow. Per-game config files, allowing various features to [...]]]></description>
			<content:encoded><![CDATA[<p>Still alive, working on PackBSP when not creatively-drained from work. I may end up skipping past a few version numbers to represent all the rewriting going on. Among other initiatives:</p>
<ul>
<li> Some sort of system to handle packing multiple maps at once, in order to support the VPK/campaign workflow.</li>
<li> Per-game config files, allowing various features to be toggled on and off.</li>
<li>Foreign-language support. It&#8217;ll be possible for non-programmers to contribute translations.</li>
<li>Ability to manually create a per-map config file that specifies assets to include/exclude</li>
</ul>
<p>On a lighter note, I went ahead and pre-ordered Deus Ex: Human Revolution, mainly on the strength of the favorable comments everyone who downloaded the leaked press-beta, but unfortunately it won&#8217;t be out until August. (And let&#8217;s face it, with a title like &#8220;I Wanted Orange&#8221; I pretty much had to.)</p>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px; overflow-x: hidden; overflow-y: hidden;">﻿</div>
]]></content:encoded>
			<wfw:commentRss>http://technofovea.com/blog/archives/940/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PackBSP, configurability, and Spring IoC</title>
		<link>http://technofovea.com/blog/archives/935</link>
		<comments>http://technofovea.com/blog/archives/935#comments</comments>
		<pubDate>Tue, 24 May 2011 22:25:06 +0000</pubDate>
		<dc:creator>Darien</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[packbsp]]></category>

		<guid isPermaLink="false">http://technofovea.com/blog/?p=935</guid>
		<description><![CDATA[As PackBSP has grown, I&#8217;ve tried to keep certain things &#8220;softcoded&#8221; in configuration files, firstly to make more problems user-solvable, and secondly to support people making maps for new games and mods which I haven&#8217;t personally encountered. For example, the list of VMT shader parameters can get new additions as games are patched, and some [...]]]></description>
			<content:encoded><![CDATA[<p>As PackBSP has grown, I&#8217;ve tried to keep certain things &#8220;softcoded&#8221; in configuration files, firstly to make more problems user-solvable, and secondly to support people making maps for new games and mods which I haven&#8217;t personally encountered. For example, the list of <a href="http://developer.valvesoftware.com/wiki/Category:List_of_Shader_Parameters">VMT shader parameters</a> can get new additions as games are patched, and some mods may incorporate things like <a href="http://developer.valvesoftware.com/wiki/Level_Overviews">level overviews</a>.</p>
<p>Working on support for multiple SDKs/Engines/Mods, I think the effort I&#8217;ve put into these configuration options (which are starting to multiply and cross-cut) runs the risk of &#8220;reinventing the wheel&#8221;&#8230;. So I am considering rewiring PackBSP to use some minimal parts of the <a href="http://www.springsource.org/about">Spring Framework</a> instead. (No, PackBSP is not becoming a web-application.)</p>
<p>My hope is that this will allow a broad, consistent, and easier route for configuration, which reduces the barrier tech-savvy users face when it comes to getting PackBSP to work <em>just right</em> with an obscure game or new mod.</p>
]]></content:encoded>
			<wfw:commentRss>http://technofovea.com/blog/archives/935/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Working on L4D2 support (2)</title>
		<link>http://technofovea.com/blog/archives/924</link>
		<comments>http://technofovea.com/blog/archives/924#comments</comments>
		<pubDate>Sat, 14 May 2011 07:08:27 +0000</pubDate>
		<dc:creator>Darien</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[packbsp]]></category>

		<guid isPermaLink="false">http://technofovea.com/blog/?p=924</guid>
		<description><![CDATA[Not a lot of news, been busy with work-work. I&#8217;ve made some progress with adding multiple-SDK support to PackBSP (progress you can follow on the GitHub page, if so interested) but there&#8217;s still a ways to go in terms of specific support for SDKs like the L4D2 Authoring Tools. I may need to take some [...]]]></description>
			<content:encoded><![CDATA[<p>Not a lot of news, been busy with <em>work</em>-work. I&#8217;ve made some progress with adding multiple-SDK support to PackBSP (progress you can follow on the GitHub page, if so interested) but there&#8217;s still a ways to go in terms of specific support for SDKs like the L4D2 Authoring Tools. I may need to take some system tools and try to determine what the game is doing behind-the-scenes in terms of accessing file paths, working with add-ons, etc.</p>
<p>I&#8217;ve also added an announcement e-mail list for anyone who wants to get notified when the next release comes out. (It may be a while, but all the more reason to set up a reminder before you forget, eh?) The sign-up form is on the PackBSP page here on the blog.</p>
]]></content:encoded>
			<wfw:commentRss>http://technofovea.com/blog/archives/924/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Working on L4D2 support</title>
		<link>http://technofovea.com/blog/archives/920</link>
		<comments>http://technofovea.com/blog/archives/920#comments</comments>
		<pubDate>Tue, 05 Apr 2011 04:24:04 +0000</pubDate>
		<dc:creator>Darien</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[packbsp]]></category>

		<guid isPermaLink="false">http://technofovea.com/blog/?p=920</guid>
		<description><![CDATA[I think the next step in PackBSP will be L4D2 support, which may require some architectural changes, given that L4D2 has it&#8217;s own separate SDK rather than being just another game handled by the Source SDK launcher. Change how SDKs, engines, and games are detected so it can detect and use the L4D(2) Authoring tools [...]]]></description>
			<content:encoded><![CDATA[<p>I think the next step in PackBSP will be L4D2 support, which may require some architectural changes, given that L4D2 has it&#8217;s own separate SDK rather than being just another game handled by the Source SDK launcher.</p>
<ul>
<li>Change how SDKs, engines, and games are detected so it can detect and use the L4D(2) Authoring tools rather than assuming SourceSDK</li>
<li>If working on an addon campaign map, the include-path where it looks for files ought to include that addons directory</li>
<li>Change the final packing step so that the user can choose to:
<ol>
<li>Save to a file format (res file, bspzip list)</li>
<li>Use BSPZIP right away (current behavior)</li>
<li>Copy files to the correct places in a folder (so that a VPK can be created)</li>
</ol>
</li>
<li>Update map-includes (loading screens, map overviews)</li>
<li>Update &#8220;special&#8221; map entities that aren&#8217;t covered by the FGD, document those that can&#8217;t be supported at this time</li>
<li>Update known material shader properties</li>
</ul>
<p>Once I have L4D2 support in place, the original L4D  and/or Alien Swarm should both be quite a bit easier to add.</p>
]]></content:encoded>
			<wfw:commentRss>http://technofovea.com/blog/archives/920/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

