<?xml version="1.0" encoding="ISO-8859-1"?>
<rss version="2.0">
    <channel>
        <title>Hazman's Corner</title>
        <link>http://www.byond.com/members/Hazman</link>
        <description>Where my dead projects die. So all of them, shortly after invention.</description>
        <lastBuildDate>Sun, 20 Jul 2008 16:18:20 GMT</lastBuildDate>
        <language>en-us</language>
    
                <item>
            <title>Exclusive Content and why I hate it</title>
            <link>http://www.byond.com/members/?command=view_post&amp;post=45568</link>
            <guid>http://www.byond.com/members/?command=view_post&amp;post=45568</guid>
            <pubDate>Sun, 20 Jul 2008 16:18:17 GMT</pubDate>
            
            <comments>http://www.byond.com/members/Hazman?command=view_comments&amp;post=45568#comments</comments>
            
            <description>I recently found out Fallout 3's downloadable content is not going to be available on PS3. I don't have a PS3 but this still makes me angry.&lt;br/&gt;
When (more like 'if', the way it's going) I buy Fallout 3, I'm going to be buying the PC Collector's version. I really enjoyed playing Fallout 2, and though the game will obviously be different, what with it being made by a different development crew from a different company with different technology and to target a different audience (hope they don't Bioshock it and retard it up so that xbots can understand it), but at the end of the day Bethesda have apparently tried to keep the feel of the original games.&lt;br/&gt;
So anyway, exclusive content. I'm trying to think of a good analogy and I can't, so I'll just say it straight.&lt;br/&gt;
Exclusive content is punishing your players for making a decision that they're happy with. Especially if you're bringing out the game months after the console's release, you're basically telling people 'ha ha you screwed up by making a purchase that you're happy with but which we've arbitrarily decided is a bad one'.&lt;br/&gt;
But of course they don't arbitrarily decide that a certain console is a bad one, they get paid a ton of cash to develop and release that exclusive content exclusively for an exclusive group of exclusive people.&lt;br/&gt;
Or rather, the game's &lt;i&gt;publisher&lt;/i&gt; gets paid a ton of cash. Of course, this doesn't apply to Bethesda since they publish their own games so basically what they've done, by announcing exclusive content, is let everyone know in advance how they're concerned about raking in extra cash rather than actually producing a decent game.&lt;br/&gt;
Good work, Bethesda, unless I'm convinced otherwise, Fallout 3 has been added to the 'List of games which I'm going to download from Bittorrent just to strike another one up against you'.</description>
        </item>
                <item>
            <title>Latest random non-BYOND Review: STALKER SoC</title>
            <link>http://www.byond.com/members/?command=view_post&amp;post=45295</link>
            <guid>http://www.byond.com/members/?command=view_post&amp;post=45295</guid>
            <pubDate>Mon, 14 Jul 2008 00:12:34 GMT</pubDate>
            
            <comments>http://www.byond.com/members/Hazman?command=view_comments&amp;post=45295#comments</comments>
            
            <description>I first played S.T.A.L.K.E.R Shadow of Chernobyl a while back, and I recently (like, today) came back to it and remembered how awesomly fun it is. It's a FPS RPG hybrid, although rather than level up your character you get stronger by buying upgraded guns and armour.&lt;br/&gt;
The game is set in an alternate future, where the Chernobyl incident caused a huge area of land to sort of... mutate. Random pockets of radically altered physics appeared, tearing apart, frying, electrocuting and crushing anything foolish enough to enter them, and high radiation levels, coupled with some mysterious goings on at the heart of the zone, caused mutations in animals and humans (e.g., you know that Doctor Who where they're in WW2 London and there's the wierd kid with the gas mask glued to his face? There's a mutant a bit like him).&lt;br/&gt;
&lt;br/&gt;
Gameplay wise, there is a lot of running around. The firefights are cool, as enemies will use 'tactics' to attack you, and will fire on your last position to keep you suppressed (even if you're actually sneaky-sneaking around their flank with a knife and a silenced pistol :-P).&lt;br/&gt;
What really makes the game stand out is the environment. The game developers spent several weeks in the Chernobyl area, taking pictures, talking to locals etc. and apparently people who've been to Chernobyl say the game is 'uncannily' similar to the real thing.&lt;br/&gt;
In gameplay terms, it's incredibly immersive. I was recently moving through a bandit-run prison. The first bit was fairly long range and pretty average, but once I entered the building it became a different story. If you don't notice someone at these sorts of distances you're done for, and while in games like CoD4 being shot at is a bit of a 'huh, I wonder who that is', here it's much more of an 'OSHI-' moment. I barely escaped with my life a couple of times. There're also a couple of high-level monster engagements early on, but they aren't really built up that much and the fact that 2 mags of an AK will generally bring them down sort of lessens the effect. I'm sure that once I'm desperately trying to fend off 4 or 5 with my last mag it'll become a little more interesting.&lt;br/&gt;
The game has been given several awards for the environment and atmosphere, which brings me neatly onto the graphics.&lt;br/&gt;
OK, so they aren't Crysis. But the game has full (as in, every single surface) dynamic lighting and shadowing. A lot of the game takes place in thunderstorms, and watching the shadows of grass, trees and scenery dance around in the lightning is awesome. The detail on the people and objects isn't great, and the lip-syncing looks more like chewing, but since most people you see are through the scope of your rifle or the iron sights of your submachine gun, there isn't really much opportunity to scrutinise there :-P.&lt;br/&gt;
If you like game like Deus Ex and Bioshock, you're likely to enjoy STALKER. Do be warned though, you do have to run some long distances and it's put a couple of my friends off (although I personally enjoy moving through places, checking out the scenery, exploring etc. and I hate games like Oblivion that let you quick travel all the time).&lt;br/&gt;
STALKER Clear Sky, the prequel/prologue, is just around the corner and is due for release at the end of August, but if you can't wait, STALKER Shadow of Chernobyl is available as a knocked-down title right now.</description>
        </item>
                <item>
            <title>RScript system progress</title>
            <link>http://www.byond.com/members/?command=view_post&amp;post=45209</link>
            <guid>http://www.byond.com/members/?command=view_post&amp;post=45209</guid>
            <pubDate>Fri, 11 Jul 2008 23:25:35 GMT</pubDate>
            
            <comments>http://www.byond.com/members/Hazman?command=view_comments&amp;post=45209#comments</comments>
            
            <description>Well, since it's a script system for a robot game, it made sense to call it 'RScipt'.&lt;br/&gt;
Anyway, it's going pretty good, and apart from the fact that I haven't actually made any useful built-in functions, it's basically usable. The only other problem is that it pretty much blindly marches through syntax errors (e.g., unterminated strings) and somehow ends up with something executable, but most of the problems there aren't major.&lt;br/&gt;
&lt;br/&gt;
There are currently 5 keywords:&lt;ul&gt;&lt;li&gt;var&lt;/li&gt;&lt;li&gt;output&lt;/li&gt;&lt;li&gt;return&lt;/li&gt;&lt;li&gt;if&lt;/li&gt;&lt;li&gt;goto&lt;/li&gt;&lt;/ul&gt;&lt;br/&gt;
&lt;br/&gt;
These all behave pretty much exactly as you'd expect, although I'm having trouble combining blocks of code and elses in if statements so at the moment there is no 'else' keyword. I had a little trouble handling blocks, but eventually I settles on parsing them out in a similar way to statements, and turning them into unnamed functions, which brings me on to the accumulator.&lt;br/&gt;
As I mentioned in my last post, return values are handled a little differently in RScript. Rather than directly evaluating to their result, functions set the program's accumulator. Since code blocks are functions, this brings up the fairly obvious problem that the accumulator is incredibly unreliable:&lt;br/&gt;
&lt;tt&gt;&lt;pre&gt;
function main();

	getANumber();
	
	var myAcc;
	myAcc = acc;
	
	output('pre acc is '+acc);
	if(acc == 5)
	begin;
		output('acc == 5!');
	end;
	output('post acc is '+acc);
	
	if(myAcc == 5)
	begin;
		output('myAcc == 5!');
	end;
	
	output('end execution');
	
endfunction;

function getANumber();
return(5);
endfunction;

OUTPUT:
pre acc is 5
post acc is 5
myAcc == 5!
end execution
&lt;/pre&gt;&lt;/tt&gt;&lt;br/&gt;
As you can see, although the accumulator is successfully used to assign to myAcc, it cannot be itself compared. Additionally, at the end of the program, the accumulator is empty, because the begin/end block in the if() statement is resolved to a function with a hidden, empty 'return'.&lt;br/&gt;
&lt;br/&gt;
Here is an example of a keyword programmed in DM, the trigonometric sine function:&lt;br/&gt;
&lt;DIV CLASS=&quot;dmcode&quot;&gt;&lt;TABLE WIDTH=100% BORDER=0&gt;&lt;TR&gt;&lt;TD&gt;&lt;PRE class=&quot;dmcode&quot;&gt;keyword
    kw_sin
        Execute(list/tokens,function/parent)
            &lt;span class=dmkeyword&gt;if&lt;/span&gt;(tokens.len &amp;gt; 1)
            
                &lt;span class=dmkeyword&gt;var&lt;/span&gt;/token/Statement/t = tokens[2]
                
                &lt;span class=dmkeyword&gt;if&lt;/span&gt;(istype(t))t = t.Evaluate(parent)
                
                &lt;span class=dmkeyword&gt;if&lt;/span&gt;(istext(t.value)). = text2num(t.value)
                &lt;span class=dmkeyword&gt;else&lt;/span&gt; . = t.value
                parent.parent.setAcc(sin(.))
            &lt;span class=dmkeyword&gt;else&lt;/span&gt;
                parent.Raise(&lt;span class=dmstring&gt;&quot;Argument expected.&quot;&lt;/span&gt;)&lt;/PRE&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;br/&gt;
&lt;br/&gt;
Programming a custom keyword is a little more complex than plain ol' DM. First, you can see that the keyword's path is prefixed with 'kw'. This is to allow keywords that are named identically to DM keywords, otherwise I'd have the compiler complaining when I tried to define the 'if' keyword!&lt;br/&gt;
Secondly, the arguments to the keyword come in the form of a list of tokens. Normally, since most normal people put parenthesis around their function arguments, these tokens are Statements. Statements represent lists of tokens which can be evaluated to a single value, such as '1+1' or ''cheese'+'cake''. Functions cannot be resolved to a value, thus they cannot be used in Statements. The first thing to do with a statement is to evaluate it (this isn't done automatically for various reasons) to get, hooray, a new token. This token holds the result of the expression in the statement. After that, it's a case of ensuring that the argument is a number by text2num'ing it, and then setting the program's (stored in parent.parent) accumulator using the setAcc() function.&lt;br/&gt;
&lt;br/&gt;
Anyway, it's 00:30AM and since I finally got function arguments and blocks to work today, I think I deserve some an early night. Tomorrow I might even be able to get to work on some actual gameplay!</description>
        </item>
                <item>
            <title>Programmable Battle Bot Game</title>
            <link>http://www.byond.com/members/?command=view_post&amp;post=45154</link>
            <guid>http://www.byond.com/members/?command=view_post&amp;post=45154</guid>
            <pubDate>Thu, 10 Jul 2008 20:57:12 GMT</pubDate>
            
            <comments>http://www.byond.com/members/Hazman?command=view_comments&amp;post=45154#comments</comments>
            
            <description>I recently thought back to all the fun I had making robots for things like AT-Robots and especially Colobot, so I thought I'd have a go at building my own robot building game. So far it's going OK, I've  been working on the robot scripting language and it's going pretty well, so I thought I'd share some information about the language, and about the game, with you peoples.&lt;br/&gt;
I'll start by describing the interpreter at its most funamental level. The first thing it does is split up the code into individual lines: this is about a third of the output shown in my last post. This is pretty much the simplist step.&lt;br/&gt;
As it splits the code up on a line-by-line basis, it also splits up each function. The scripting language has a 'main' function, and code written outside of a function will cause an error.&lt;br/&gt;
The parser then loops through each line and builds a list of tokens. Tokens are basically each individial part of a line: parenthesis, words, number, operators etc.&lt;br/&gt;
&lt;br/&gt;
My interpreter has 2 modes: pre parsed and JIT parsing. Pre parsing breaks the script down into tokens at the start of execution, JIT does it on a line-by-line basis. So for example, in my finished game I'm intending to use JIT parsing so that the server isn't lagged at the start of a battle.&lt;br/&gt;
&lt;br/&gt;
The token parser is not fantastically elegant: at the moment it has 2 'modes': assignment and keyword use. Assignment is giving a variable a value, keyword use is declaring vars and calling functions.&lt;br/&gt;
&lt;br/&gt;
The system also has a built-in mathematical evaluation system. It works directly left to right, rather than giving priority to certain statements, although brackets are still evaluated before anything else.&lt;br/&gt;
&lt;br/&gt;
The main difference between this language and others is its use of return values. Since I want this language to be used in robot battles, each command has to take a certain number of ticks, and this is incompatible with the simple evaluation system I have. So, a function does not evaluate to its return value as it does in BYOND.&lt;br/&gt;
Instead, a function sets a register as its return value. So, for example, if I had a 'sin' trigonometric function, running 'sin(90)' would set the result register (which is named 'acc', short for 'accumulator') to the number 1.&lt;br/&gt;
&lt;br/&gt;
Here are a couple of sample programs I've been using to test the interpreter. All of them work as expected and produce the given output.&lt;br/&gt;
&lt;br/&gt;
&lt;b&gt;String/number mixing evaluation test&lt;/b&gt;&lt;br/&gt;
&lt;tt&gt;function main();&lt;br/&gt;
output(5);&lt;br/&gt;
output('hello world');&lt;br/&gt;
output('hello world '+5);&lt;br/&gt;
&lt;br/&gt;
var number;&lt;br/&gt;
number = 5;&lt;br/&gt;
output(number);&lt;br/&gt;
&lt;br/&gt;
var string;&lt;br/&gt;
string = 'cake';&lt;br/&gt;
output(string);&lt;br/&gt;
&lt;br/&gt;
output(string+' is a lie');&lt;br/&gt;
&lt;br/&gt;
output('I have '+number+' '+string+'s');&lt;br/&gt;
&lt;br/&gt;
endfunction;&lt;br/&gt;
&lt;/tt&gt;&lt;br/&gt;
Output:&lt;br/&gt;
&lt;tt&gt;5&lt;br/&gt;
hello world&lt;br/&gt;
hello world 5&lt;br/&gt;
5&lt;br/&gt;
cake&lt;br/&gt;
cake is a lie&lt;br/&gt;
I have 5 cakes&lt;/tt&gt;&lt;br/&gt;
&lt;br/&gt;
&lt;b&gt;Number evaluation test&lt;/b&gt;&lt;br/&gt;
&lt;tt&gt;function main();&lt;br/&gt;
var number;&lt;br/&gt;
number = (5+10)*3**2;&lt;br/&gt;
output(number);&lt;br/&gt;
number = (5+10)*(3**2);&lt;br/&gt;
output(number);&lt;br/&gt;
endfunction;&lt;br/&gt;
&lt;/tt&gt;&lt;br/&gt;
Output (not a very good example, really):&lt;br/&gt;
&lt;tt&gt;135&lt;br/&gt;
135&lt;/tt&gt;&lt;br/&gt;
&lt;br/&gt;
&lt;b&gt;Function stack test&lt;/b&gt;&lt;br/&gt;
&lt;tt&gt;function main();&lt;br/&gt;
output('function 1');&lt;br/&gt;
otherfunction();&lt;br/&gt;
output('function 1 again');&lt;br/&gt;
otherfunction();&lt;br/&gt;
endfunction;&lt;br/&gt;
&lt;br/&gt;
function otherfunction();&lt;br/&gt;
output('other function');&lt;br/&gt;
return;&lt;br/&gt;
endfunction;&lt;/tt&gt;&lt;br/&gt;
&lt;br/&gt;
Output:&lt;tt&gt;function 1&lt;br/&gt;
other function&lt;br/&gt;
function 1 again&lt;br/&gt;
other function&lt;/tt&gt;&lt;br/&gt;
&lt;br/&gt;
&lt;b&gt;Accumulator test&lt;/b&gt;&lt;br/&gt;
&lt;tt&gt;function main();&lt;br/&gt;
secondfunction();&lt;br/&gt;
output(acc);&lt;br/&gt;
endfunction;&lt;br/&gt;
&lt;br/&gt;
function secondfunction();&lt;br/&gt;
return(10);&lt;br/&gt;
endfunction;&lt;/tt&gt;&lt;br/&gt;
&lt;br/&gt;
Output:&lt;tt&gt;10&lt;br/&gt;
&lt;/tt&gt;</description>
        </item>
                <item>
            <title>Shhh it's a secret</title>
            <link>http://www.byond.com/members/?command=view_post&amp;post=45124</link>
            <guid>http://www.byond.com/members/?command=view_post&amp;post=45124</guid>
            <pubDate>Wed, 09 Jul 2008 23:27:07 GMT</pubDate>
            
            <comments>http://www.byond.com/members/Hazman?command=view_comments&amp;post=45124#comments</comments>
            
            <description>Parsing function main();&lt;br/&gt;
var firstVar;&lt;br/&gt;
firstVar = 5+10;&lt;br/&gt;
output(firstVar);&lt;br/&gt;
var secVar;&lt;br/&gt;
secVar = 10;&lt;br/&gt;
&lt;br/&gt;
output(secVar);&lt;br/&gt;
&lt;br/&gt;
firstVar = firstVar+(secVar*5);&lt;br/&gt;
output(firstVar);&lt;br/&gt;
endfunction;&lt;br/&gt;
replacing... function main();var firstVar;&lt;br/&gt;
firstVar = 5+10;&lt;br/&gt;
output(firstVar);&lt;br/&gt;
var secVar;&lt;br/&gt;
secVar = 10;&lt;br/&gt;
&lt;br/&gt;
output(secVar);&lt;br/&gt;
&lt;br/&gt;
firstVar = firstVar+(secVar*5);&lt;br/&gt;
output(firstVar);&lt;br/&gt;
endfunction;&lt;br/&gt;
replacing... function main();var firstVar;firstVar = 5+10;&lt;br/&gt;
output(firstVar);&lt;br/&gt;
var secVar;&lt;br/&gt;
secVar = 10;&lt;br/&gt;
&lt;br/&gt;
output(secVar);&lt;br/&gt;
&lt;br/&gt;
firstVar = firstVar+(secVar*5);&lt;br/&gt;
output(firstVar);&lt;br/&gt;
endfunction;&lt;br/&gt;
replacing... function main();var firstVar;firstVar = 5+10;output(firstVar);&lt;br/&gt;
var secVar;&lt;br/&gt;
secVar = 10;&lt;br/&gt;
&lt;br/&gt;
output(secVar);&lt;br/&gt;
&lt;br/&gt;
firstVar = firstVar+(secVar*5);&lt;br/&gt;
output(firstVar);&lt;br/&gt;
endfunction;&lt;br/&gt;
replacing... function main();var firstVar;firstVar = 5+10;output(firstVar);var secVar;&lt;br/&gt;
secVar = 10;&lt;br/&gt;
&lt;br/&gt;
output(secVar);&lt;br/&gt;
&lt;br/&gt;
firstVar = firstVar+(secVar*5);&lt;br/&gt;
output(firstVar);&lt;br/&gt;
endfunction;&lt;br/&gt;
replacing... function main();var firstVar;firstVar = 5+10;output(firstVar);var secVar;secVar = 10;&lt;br/&gt;
&lt;br/&gt;
output(secVar);&lt;br/&gt;
&lt;br/&gt;
firstVar = firstVar+(secVar*5);&lt;br/&gt;
output(firstVar);&lt;br/&gt;
endfunction;&lt;br/&gt;
replacing... function main();var firstVar;firstVar = 5+10;output(firstVar);var secVar;secVar = 10;&lt;br/&gt;
output(secVar);&lt;br/&gt;
&lt;br/&gt;
firstVar = firstVar+(secVar*5);&lt;br/&gt;
output(firstVar);&lt;br/&gt;
endfunction;&lt;br/&gt;
replacing... function main();var firstVar;firstVar = 5+10;output(firstVar);var secVar;secVar = 10;output(secVar);&lt;br/&gt;
&lt;br/&gt;
firstVar = firstVar+(secVar*5);&lt;br/&gt;
output(firstVar);&lt;br/&gt;
endfunction;&lt;br/&gt;
replacing... function main();var firstVar;firstVar = 5+10;output(firstVar);var secVar;secVar = 10;output(secVar);&lt;br/&gt;
firstVar = firstVar+(secVar*5);&lt;br/&gt;
output(firstVar);&lt;br/&gt;
endfunction;&lt;br/&gt;
replacing... function main();var firstVar;firstVar = 5+10;output(firstVar);var secVar;secVar = 10;output(secVar);firstVar = firstVar+(secVar*5);&lt;br/&gt;
output(firstVar);&lt;br/&gt;
endfunction;&lt;br/&gt;
replacing... function main();var firstVar;firstVar = 5+10;output(firstVar);var secVar;secVar = 10;output(secVar);firstVar = firstVar+(secVar*5);output(firstVar);&lt;br/&gt;
endfunction;&lt;br/&gt;
replacing... function main();var firstVar;firstVar = 5+10;output(firstVar);var secVar;secVar = 10;output(secVar);firstVar = firstVar+(secVar*5);output(firstVar);endfunction;&lt;br/&gt;
replacing function main();var firstVar;firstVar = 5+10;output(firstVar);var secVar;secVar = 10;output(secVar);firstVar = firstVar+(secVar*5);output(firstVar);endfunction;&lt;br/&gt;
remaining: var firstVar;firstVar = 5+10;output(firstVar);var secVar;secVar = 10;output(secVar);firstVar = firstVar+(secVar*5);output(firstVar);endfunction;&lt;br/&gt;
remaining: firstVar = 5+10;output(firstVar);var secVar;secVar = 10;output(secVar);firstVar = firstVar+(secVar*5);output(firstVar);endfunction;&lt;br/&gt;
remaining: output(firstVar);var secVar;secVar = 10;output(secVar);firstVar = firstVar+(secVar*5);output(firstVar);endfunction;&lt;br/&gt;
remaining: var secVar;secVar = 10;output(secVar);firstVar = firstVar+(secVar*5);output(firstVar);endfunction;&lt;br/&gt;
remaining: secVar = 10;output(secVar);firstVar = firstVar+(secVar*5);output(firstVar);endfunction;&lt;br/&gt;
remaining: output(secVar);firstVar = firstVar+(secVar*5);output(firstVar);endfunction;&lt;br/&gt;
remaining: firstVar = firstVar+(secVar*5);output(firstVar);endfunction;&lt;br/&gt;
remaining: output(firstVar);endfunction;&lt;br/&gt;
remaining: endfunction;&lt;br/&gt;
remaining: &lt;br/&gt;
line : function main()&lt;br/&gt;
line : var firstVar&lt;br/&gt;
line : firstVar = 5+10&lt;br/&gt;
line : output(firstVar)&lt;br/&gt;
line : var secVar&lt;br/&gt;
line : secVar = 10&lt;br/&gt;
line : output(secVar)&lt;br/&gt;
line : firstVar = firstVar+(secVar*5)&lt;br/&gt;
line : output(firstVar)&lt;br/&gt;
line : endfunction&lt;br/&gt;
Parsing 10 lines...&lt;br/&gt;
function main() OF &lt;br/&gt;
-&gt; function&lt;br/&gt;
New function  main&lt;br/&gt;
var firstVar OF /function&lt;br/&gt;
-&gt; var firs&lt;br/&gt;
firstVar = 5+10 OF /function&lt;br/&gt;
-&gt; firstVar&lt;br/&gt;
output(firstVar) OF /function&lt;br/&gt;
-&gt; output(f&lt;br/&gt;
var secVar OF /function&lt;br/&gt;
-&gt; var secV&lt;br/&gt;
secVar = 10 OF /function&lt;br/&gt;
-&gt; secVar =&lt;br/&gt;
output(secVar) OF /function&lt;br/&gt;
-&gt; output(s&lt;br/&gt;
firstVar = firstVar+(secVar*5) OF /function&lt;br/&gt;
-&gt; firstVar&lt;br/&gt;
output(firstVar) OF /function&lt;br/&gt;
-&gt; output(f&lt;br/&gt;
endfunction OF /function&lt;br/&gt;
-&gt; endfunct&lt;br/&gt;
End function&lt;br/&gt;
118 in class 1 (0)&lt;br/&gt;
97 in class 1 (1)&lt;br/&gt;
114 in class 1 (1)&lt;br/&gt;
32 in class -1 (1)&lt;br/&gt;
102 in class 1 (0)&lt;br/&gt;
105 in class 1 (1)&lt;br/&gt;
114 in class 1 (1)&lt;br/&gt;
115 in class 1 (1)&lt;br/&gt;
116 in class 1 (1)&lt;br/&gt;
86 in class 1 (1)&lt;br/&gt;
97 in class 1 (1)&lt;br/&gt;
114 in class 1 (1)&lt;br/&gt;
2 tokens found.&lt;br/&gt;
 -&gt; var&lt;br/&gt;
 -&gt; firstVar&lt;br/&gt;
102 in class 1 (0)&lt;br/&gt;
105 in class 1 (1)&lt;br/&gt;
114 in class 1 (1)&lt;br/&gt;
115 in class 1 (1)&lt;br/&gt;
116 in class 1 (1)&lt;br/&gt;
86 in class 1 (1)&lt;br/&gt;
97 in class 1 (1)&lt;br/&gt;
114 in class 1 (1)&lt;br/&gt;
32 in class -1 (1)&lt;br/&gt;
61 in class 5 (0)&lt;br/&gt;
32 in class -1 (5)&lt;br/&gt;
53 in class 3 (0)&lt;br/&gt;
43 in class 5 (3)&lt;br/&gt;
49 in class 3 (5)&lt;br/&gt;
48 in class 3 (3)&lt;br/&gt;
5 tokens found.&lt;br/&gt;
 -&gt; firstVar&lt;br/&gt;
 -&gt; =&lt;br/&gt;
 -&gt; 5&lt;br/&gt;
 -&gt; +&lt;br/&gt;
 -&gt; 10&lt;br/&gt;
111 in class 1 (0)&lt;br/&gt;
117 in class 1 (1)&lt;br/&gt;
116 in class 1 (1)&lt;br/&gt;
112 in class 1 (1)&lt;br/&gt;
117 in class 1 (1)&lt;br/&gt;
116 in class 1 (1)&lt;br/&gt;
40 in class 4 (1)&lt;br/&gt;
102 in class 1 (4)&lt;br/&gt;
105 in class 1 (1)&lt;br/&gt;
114 in class 1 (1)&lt;br/&gt;
115 in class 1 (1)&lt;br/&gt;
116 in class 1 (1)&lt;br/&gt;
86 in class 1 (1)&lt;br/&gt;
97 in class 1 (1)&lt;br/&gt;
114 in class 1 (1)&lt;br/&gt;
41 in class 4 (1)&lt;br/&gt;
4 tokens found.&lt;br/&gt;
 -&gt; output&lt;br/&gt;
 -&gt; (&lt;br/&gt;
 -&gt; firstVar&lt;br/&gt;
 -&gt; )&lt;br/&gt;
Statement replacing tokens 2 to 4, length 1&lt;br/&gt;
118 in class 1 (0)&lt;br/&gt;
97 in class 1 (1)&lt;br/&gt;
114 in class 1 (1)&lt;br/&gt;
32 in class -1 (1)&lt;br/&gt;
115 in class 1 (0)&lt;br/&gt;
101 in class 1 (1)&lt;br/&gt;
99 in class 1 (1)&lt;br/&gt;
86 in class 1 (1)&lt;br/&gt;
97 in class 1 (1)&lt;br/&gt;
114 in class 1 (1)&lt;br/&gt;
2 tokens found.&lt;br/&gt;
 -&gt; var&lt;br/&gt;
 -&gt; secVar&lt;br/&gt;
115 in class 1 (0)&lt;br/&gt;
101 in class 1 (1)&lt;br/&gt;
99 in class 1 (1)&lt;br/&gt;
86 in class 1 (1)&lt;br/&gt;
97 in class 1 (1)&lt;br/&gt;
114 in class 1 (1)&lt;br/&gt;
32 in class -1 (1)&lt;br/&gt;
61 in class 5 (0)&lt;br/&gt;
32 in class -1 (5)&lt;br/&gt;
49 in class 3 (0)&lt;br/&gt;
48 in class 3 (3)&lt;br/&gt;
3 tokens found.&lt;br/&gt;
 -&gt; secVar&lt;br/&gt;
 -&gt; =&lt;br/&gt;
 -&gt; 10&lt;br/&gt;
111 in class 1 (0)&lt;br/&gt;
117 in class 1 (1)&lt;br/&gt;
116 in class 1 (1)&lt;br/&gt;
112 in class 1 (1)&lt;br/&gt;
117 in class 1 (1)&lt;br/&gt;
116 in class 1 (1)&lt;br/&gt;
40 in class 4 (1)&lt;br/&gt;
115 in class 1 (4)&lt;br/&gt;
101 in class 1 (1)&lt;br/&gt;
99 in class 1 (1)&lt;br/&gt;
86 in class 1 (1)&lt;br/&gt;
97 in class 1 (1)&lt;br/&gt;
114 in class 1 (1)&lt;br/&gt;
41 in class 4 (1)&lt;br/&gt;
4 tokens found.&lt;br/&gt;
 -&gt; output&lt;br/&gt;
 -&gt; (&lt;br/&gt;
 -&gt; secVar&lt;br/&gt;
 -&gt; )&lt;br/&gt;
Statement replacing tokens 2 to 4, length 1&lt;br/&gt;
102 in class 1 (0)&lt;br/&gt;
105 in class 1 (1)&lt;br/&gt;
114 in class 1 (1)&lt;br/&gt;
115 in class 1 (1)&lt;br/&gt;
116 in class 1 (1)&lt;br/&gt;
86 in class 1 (1)&lt;br/&gt;
97 in class 1 (1)&lt;br/&gt;
114 in class 1 (1)&lt;br/&gt;
32 in class -1 (1)&lt;br/&gt;
61 in class 5 (0)&lt;br/&gt;
32 in class -1 (5)&lt;br/&gt;
102 in class 1 (0)&lt;br/&gt;
105 in class 1 (1)&lt;br/&gt;
114 in class 1 (1)&lt;br/&gt;
115 in class 1 (1)&lt;br/&gt;
116 in class 1 (1)&lt;br/&gt;
86 in class 1 (1)&lt;br/&gt;
97 in class 1 (1)&lt;br/&gt;
114 in class 1 (1)&lt;br/&gt;
43 in class 5 (1)&lt;br/&gt;
40 in class 4 (5)&lt;br/&gt;
115 in class 1 (4)&lt;br/&gt;
101 in class 1 (1)&lt;br/&gt;
99 in class 1 (1)&lt;br/&gt;
86 in class 1 (1)&lt;br/&gt;
97 in class 1 (1)&lt;br/&gt;
114 in class 1 (1)&lt;br/&gt;
42 in class 5 (1)&lt;br/&gt;
53 in class 3 (5)&lt;br/&gt;
41 in class 4 (3)&lt;br/&gt;
9 tokens found.&lt;br/&gt;
 -&gt; firstVar&lt;br/&gt;
 -&gt; =&lt;br/&gt;
 -&gt; firstVar&lt;br/&gt;
 -&gt; +&lt;br/&gt;
 -&gt; (&lt;br/&gt;
 -&gt; secVar&lt;br/&gt;
 -&gt; *&lt;br/&gt;
 -&gt; 5&lt;br/&gt;
 -&gt; )&lt;br/&gt;
Statement replacing tokens 5 to 9, length 3&lt;br/&gt;
111 in class 1 (0)&lt;br/&gt;
117 in class 1 (1)&lt;br/&gt;
116 in class 1 (1)&lt;br/&gt;
112 in class 1 (1)&lt;br/&gt;
117 in class 1 (1)&lt;br/&gt;
116 in class 1 (1)&lt;br/&gt;
40 in class 4 (1)&lt;br/&gt;
102 in class 1 (4)&lt;br/&gt;
105 in class 1 (1)&lt;br/&gt;
114 in class 1 (1)&lt;br/&gt;
115 in class 1 (1)&lt;br/&gt;
116 in class 1 (1)&lt;br/&gt;
86 in class 1 (1)&lt;br/&gt;
97 in class 1 (1)&lt;br/&gt;
114 in class 1 (1)&lt;br/&gt;
41 in class 4 (1)&lt;br/&gt;
4 tokens found.&lt;br/&gt;
 -&gt; output&lt;br/&gt;
 -&gt; (&lt;br/&gt;
 -&gt; firstVar&lt;br/&gt;
 -&gt; )&lt;br/&gt;
Statement replacing tokens 2 to 4, length 1&lt;br/&gt;
Declaring var firstVar&lt;br/&gt;
Executing line...&lt;br/&gt;
Assigning a value to firstVar&lt;br/&gt;
Evaluating 5+10&lt;br/&gt;
Evaluating 10&lt;br/&gt;
Single token, returning...&lt;br/&gt;
Operating on /token/Number + /token/Number&lt;br/&gt;
Resolved to on 5 + 5&lt;br/&gt;
Executing line...&lt;br/&gt;
Evaluating firstVar&lt;br/&gt;
Single token, returning...&lt;br/&gt;
v 15&lt;br/&gt;
Executing line...&lt;br/&gt;
Declaring var secVar&lt;br/&gt;
Executing line...&lt;br/&gt;
Assigning a value to secVar&lt;br/&gt;
Evaluating 10&lt;br/&gt;
Single token, returning...&lt;br/&gt;
Executing line...&lt;br/&gt;
Evaluating secVar&lt;br/&gt;
Single token, returning...&lt;br/&gt;
v 10&lt;br/&gt;
Executing line...&lt;br/&gt;
Assigning a value to firstVar&lt;br/&gt;
Evaluating firstVar+(secVar*5)&lt;br/&gt;
Evaluating (secVar*5)&lt;br/&gt;
Single token, returning...&lt;br/&gt;
Evaluating secVar*5&lt;br/&gt;
Evaluating 5&lt;br/&gt;
Single token, returning...&lt;br/&gt;
Operating on /token/Number * /token/Number&lt;br/&gt;
Resolved to on 10 * 10&lt;br/&gt;
Operating on /token/Identifier + /token/Identifier&lt;br/&gt;
Resolved to on 15 + 15&lt;br/&gt;
Executing line...&lt;br/&gt;
Evaluating firstVar&lt;br/&gt;
Single token, returning...&lt;br/&gt;
v 65&lt;br/&gt;
Executing line...&lt;br/&gt;
Execution complete.</description>
        </item>
                <item>
            <title>Camspace Beta - First Impressions</title>
            <link>http://www.byond.com/members/?command=view_post&amp;post=44835</link>
            <guid>http://www.byond.com/members/?command=view_post&amp;post=44835</guid>
            <pubDate>Wed, 02 Jul 2008 22:09:14 GMT</pubDate>
            
            <comments>http://www.byond.com/members/Hazman?command=view_comments&amp;post=44835#comments</comments>
            
            <description>I was lucky enough to get an email from the Camspace team a few minutes ago about, well, &lt;a href='http://www.camspace.com/'&gt;Camspace.&lt;/a&gt;&lt;br/&gt;
Camspace is a piece of software which uses a webcam to lock onto one or more objects. Then, you can use those objects as controllers. It detects relative distance (based on object size), position and rotation so you could use a long, thin object as a steering wheel by tilting it from side to side, or as a flight stick by moving it forward and backward to control pitch.&lt;br/&gt;
&lt;br/&gt;
Since it's really dark in my room right now (hurray for nighttime and rubbishy lightbulbs) the detection isn't good, mainly locking onto either my head or everything except what I want it to lock on to. I managed to move a couple of solitaire cards around but I had to use a bright coloured highlighter and my blue mp3 player as it detects colour and I don't have any strips of coloured paper handy to use on my fingers :-(.&lt;br/&gt;
&lt;br/&gt;
Anyway, it's reasonably cool so far, I'll give a more detailed review (including a review of it as a game controller) tomorrow morning, probably.&lt;br/&gt;
&lt;br/&gt;
Also I found it hijacks shift-tab to move the little preview screen around. Very irritating for firefox users, since it picks it up even if you have other keys (like ctrl, to change tab) held down. Luckily you can change it.</description>
        </item>
                <item>
            <title>OK, what's going on?</title>
            <link>http://www.byond.com/members/?command=view_post&amp;post=44796</link>
            <guid>http://www.byond.com/members/?command=view_post&amp;post=44796</guid>
            <pubDate>Tue, 01 Jul 2008 22:14:23 GMT</pubDate>
            
            <comments>http://www.byond.com/members/Hazman?command=view_comments&amp;post=44796#comments</comments>
            
            <description>Xooxers 9/11 posts = on front page.&lt;br/&gt;
Posts critical of Xooxer's 9/11 Posts/general attitude = removed from front page.&lt;br/&gt;
&lt;br/&gt;
Explain.</description>
        </item>
                <item>
            <title>I had this idea</title>
            <link>http://www.byond.com/members/?command=view_post&amp;post=44563</link>
            <guid>http://www.byond.com/members/?command=view_post&amp;post=44563</guid>
            <pubDate>Wed, 25 Jun 2008 09:51:17 GMT</pubDate>
            
            <comments>http://www.byond.com/members/Hazman?command=view_comments&amp;post=44563#comments</comments>
            
            <description>I recently had this idea for a game when I started playing Tycoon Online again (&lt;a href=&quot;http://www.tycoononline.nu/&quot;&gt;http://www.tycoononline.nu/&lt;/a&gt;), which is a Swedish browser based game where you run a business, building factories, hiring staff, buying land, trading shares etc. And I thought 'hey, a business based game could be fun in BYOND'.&lt;br/&gt;
&lt;br/&gt;
Players start out by selecting a starting industry. As long as you can afford equipment, there's nothing stopping you from changing later or having multiple industries or whatever.&lt;br/&gt;
Then, players use their equipment to collect resources or produce finished goods, either playing short minigames to get a bonus or whatever. Materials can be sold to NPC material traders, or to other players for producing products. &lt;br/&gt;
Once a player has saved up enough cash, they can buy land to build factories, or buy areas of natural resources and tax money from people using them, or build resource extracting rigs like logging camps or fishing harbours.&lt;br/&gt;
The game world will be persistent, and once the player has a factory, goods are produced automatically (although the player will still be required to get raw materials or move finished goods around).&lt;br/&gt;
&lt;br/&gt;
I haven't got all of the details yet, and I need to think of a lot of minigames to add in to make it interesting, but I want it to be the sort of game you can play for 15 minutes, or 2 hours, and still get something out of it (i.e., enjoyment).</description>
        </item>
                <item>
            <title>So, suppression is how we fight the 'robber barons', eh?</title>
            <link>http://www.byond.com/members/?command=view_post&amp;post=44504</link>
            <guid>http://www.byond.com/members/?command=view_post&amp;post=44504</guid>
            <pubDate>Tue, 24 Jun 2008 01:50:14 GMT</pubDate>
            
            <comments>http://www.byond.com/members/Hazman?command=view_comments&amp;post=44504#comments</comments>
            
            <description>&lt;img width=737 height=842 src=&quot;http://www.byond.com/members/Hazman/files/2008%2D06/Hazman%2D0002/conspiracyPropagandaMachine3.PNG&quot;&gt;&lt;br/&gt;
&lt;br/&gt;
&lt;a href=&quot;http://www.byond.com/members/Xooxer?command=view_post&amp;post=44494&quot;&gt;http://www.byond.com/members/ Xooxer?command=view_post&amp;post=44494&lt;/a&gt;&lt;br/&gt;
&lt;br/&gt;
That post lasted 3 minutes. I thought it was fairly reasonable given what it was facing, particularly taking Xooxer's attitude in his previous posts on the subject. I thought it was fairly reasonable to ask on what grounds Xooxer expected us to believe a single poorly shot youtube video over hours of footage taken by other sources such as official news agencies.&lt;br/&gt;
&lt;br/&gt;
Some might call that post entrapment, seeing as I wrote a short Delphi program to time how long the post remained up and would have gone to bed an hour ago (it's 2:51am) if Xooxer hadn't deleted my previous post, but there you go.&lt;br/&gt;
&lt;br/&gt;
Now, I really didn't want to have to point this particular point out. I like Xooxer. I like Chatters in all it's incarnations and I like the interesting posts he puts up on his blog regarding things like quantum physics and Tornado radar equipment (which presumably I will now be barred from). But I felt I had to point out: these are the people you talk to when you discuss 9/11. Otherwise rational, friendly, likeable people who turn into bitter hippocrits, preaching free speech but threatening suppression or worse when faced with an argument they don't like. Kind of like Scientologists, except without the psychiatrist hate.&lt;br/&gt;
&lt;br/&gt;
Oh, by the way, sorry Xooxer, but you're officially a Thought Criminal for attempting to discredit the space alien lightning. I thought my youtube still clinched it, given that it had a Youtube watermark and everything, but I guess you think it's a bad idea to rely on poorly constructed evidence as well.&lt;br/&gt;
Sure, I could let you make comments and engage in an interesting, lively debate extending from the 9/11 subject into free speech and media control, and maybe try and get 15 minutes for the space aliens, but it's much easier to ignore those things and make them disappear with the Magic Button.&lt;br/&gt;
&lt;br/&gt;
[EDIT] Oh, and I guess actually screenshotting my posts after I make them really does push the argument for 'this is entrapment' quite high, doesn't it? Unless, of course, The Government And It's Omnipotent Agents photoshopped it.</description>
        </item>
                <item>
            <title>I have my priorities straight.</title>
            <link>http://www.byond.com/members/?command=view_post&amp;post=44454</link>
            <guid>http://www.byond.com/members/?command=view_post&amp;post=44454</guid>
            <pubDate>Sun, 22 Jun 2008 21:40:32 GMT</pubDate>
            
            <comments>http://www.byond.com/members/Hazman?command=view_comments&amp;post=44454#comments</comments>
            
            <description>&lt;img width=409 height=106 src=&quot;http://www.byond.com/members/Hazman/files/2008%2D06/Hazman%2D0001/priorities.PNG&quot;&gt;</description>
        </item>
            
    </channel>
</rss>

