<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.3.1" -->
<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/"
	>

<channel>
	<title>Okibatsu</title>
	<link>http://connorm.gknu.com/okanecert</link>
	<description>Happy Christmas!</description>
	<pubDate>Thu, 10 Apr 2008 01:13:30 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3.1</generator>
	<language>en</language>
			<item>
		<title>Mario</title>
		<link>http://connorm.gknu.com/okanecert/general/mario/</link>
		<comments>http://connorm.gknu.com/okanecert/general/mario/#comments</comments>
		<pubDate>Thu, 10 Apr 2008 01:11:58 +0000</pubDate>
		<dc:creator>connaa</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://connorm.gknu.com/okanecert/general/mario/</guid>
		<description><![CDATA[/*
* The Javascript Mario Experiment v0.1
* Copyright (c) 2008 Jacob Seidelin, cupboy@gmail.com
* MIT License [http://www.opensource.org/licenses/mit-license.php]
*/
var Mario = function(bMusic, iScale) {
// our own variables can be compressed, builtin functions can\'t
var toInt = parseInt,
setTimer = setTimeout,
getElement = function(id){return document.getElementById(id);},
appChild = function(parent, child) {return parent.appendChild(child);},
dc = function(tag) {return document.createElement(tag);},
child = function(e,i){return e.childNodes[i]},
charAt = function(str,idx) {return str.charAt(idx);},
floor = Math.floor, [...]]]></description>
			<content:encoded><![CDATA[<p><script type="javascript">/*
* The Javascript Mario Experiment v0.1
* Copyright (c) 2008 Jacob Seidelin, cupboy@gmail.com
* MIT License [http://www.opensource.org/licenses/mit-license.php]
*/</p>
<p>var Mario = function(bMusic, iScale) {</p>
<p>// our own variables can be compressed, builtin functions can\'t
var toInt = parseInt,
setTimer = setTimeout,
getElement = function(id){return document.getElementById(id);},
appChild = function(parent, child) {return parent.appendChild(child);},
dc = function(tag) {return document.createElement(tag);},
child = function(e,i){return e.childNodes[i]},
charAt = function(str,idx) {return str.charAt(idx);},
floor = Math.floor, round = Math.round;</p>
<p>// -----------------------------------------------------------------
// begin game setup
// -----------------------------------------------------------------</p>
<p>var bHasCanvas = !!(dc("canvas").getContext);</p>
<p>var bContScroll = bHasCanvas,
iGameTime = 200,
iPlayerWalking = 0,
iPlayerWalkCycle = 0,
iPlayerDirection = 0,
iCurrentPlayerDirection = -1,
iCurrentPlayerState = -1,
iJumpBoost = 0,
iPreJump = 0,
iCoinsCollected = 0,
iPoints = 0,
bIsDead = 0,
iPlayerMovementX = 0,
iPlayerMovementY = 4,
bPlayerIsOnGround = 0,
iScrollX = 0,</p>
<p>oLevelElement,
oPlayerElement,
aTileMap = [],
aMapRows = [],
aSpriteHTML,
aPlayerStates,
aCollisionMap = [];</p>
<p>showHide = function(oElement, bShow) {
oElement.style.display = bShow ? "block" : "none";
},</p>
<p>// create a string of characters
writeText = function(aChars, x, y, aReplaceChars) {
var 	aCharSpans = aReplaceChars || [],
i = 0;
for (i in aChars) {
aCharSpans[i] = writeChar(aChars[i], x, y, aCharSpans[i]);
x += 8 * iPixSize;
}
return aCharSpans;
},</p>
<p>// write a single character
writeChar = function(iChar, iCharX, iCharY, oReplaceChar) {</p>
<p>var 	oCharElement = createSpan(iCharX, iCharY, 7*iPixSize, 7*iPixSize),
aBits = base128ToBitString(aFont[iChar]),
i = -1,
y = 0,
x = 0;</p>
<p>var oPixelElement = oCharElement;
if (bHasCanvas) {
oPixelElement = child(oCharElement, 0).getContext("2d");
}</p>
<p>for (;y &lt; 7; y++) {
for (x = 1; x &lt; 8; x++)
if (aBits[++i]) plotPixel(9, x, y, oPixelElement, 1);
}
if (oReplaceChar) oMainElement.removeChild(oReplaceChar);
return appChild(oMainElement, oCharElement);
},</p>
<p>// create a tile span element
createSpan = function(x, y, w, h, strBGColor, strHTML){
var 	oElement = dc("span"),
oStyle = oElement.style;
if (h) {
oStyle.width = w;
oStyle.height = h;
oStyle.top = y;
oStyle.left = x;
oStyle.overflow = "hidden";
}
oStyle.position = "absolute";
oStyle.backgroundColor = strBGColor || "";</p>
<p>if (bHasCanvas) {
var oCanvas = dc("canvas");
oCanvas.style.width = oCanvas.width = w;
oCanvas.style.height = oCanvas.height = h;
oCanvas.style.top = oCanvas.style.left = 0;
oCanvas.style.position = "absolute";
if (strHTML) {
oCanvas.getContext("2d").drawImage(strHTML, 0, 0);
}
oCanvas.style.backgroundColor = "";
appChild(oElement, oCanvas);
} else {
oElement.innerHTML = strHTML || "";
}
return oElement;
},</p>
<p>// update game time text
updateTime = function() {
if (bIsDead) return;
var strTimeNow = (--iGameTime)+"";</p>
<p>while (strTimeNow.length &lt; 3) strTimeNow = 0 + strTimeNow;</p>
<p>writeText(strTimeNow.split(""), 208*iPixSize, 24*iPixSize, aTimeChars);
if (iGameTime == 0) iGameTime=200;
setTimer(updateTime, 1000);
},</p>
<p>// change the player sprite state (walk/jump/etc..)
setPlayerState = function(iNewState) {
if (bIsDead) return;
if (iPlayerDirection == iCurrentPlayerDirection &amp;&amp; iNewState == iCurrentPlayerState) return ;</p>
<p>for (var iState in aPlayerStates)
showHide(aPlayerStates[iState], (iNewState + iPlayerDirection * 4 == iState));</p>
<p>iCurrentPlayerDirection = iPlayerDirection;
iCurrentPlayerState = iNewState;
},</p>
<p>// draw tile graphics
drawTile = function(x, y, iHTMLIdx, iHTMLIdx2) {
var oSpanElement = appChild(oLevelElement,
createSpan(x * iTileSize, y * iTileSize, iTileSize, iTileSize, "", aSpriteHTML[iHTMLIdx])
);
if (iHTMLIdx2) {
appChild(oSpanElement,
createSpan(0, 0, iTileSize, iTileSize, "", aSpriteHTML[iHTMLIdx2])
);
}
return oSpanElement;
},</p>
<p>// load encoded spritedata to bitstring and generate prototype
loadSpriteData = function(aSpriteColors, strSpriteData, bFlipHori) {</p>
<p>var aBits = base128ToBitString(strSpriteData);
if (bHasCanvas) {</p>
<p>var oSpriteCanvas = dc("canvas");
var oCanvasCtx = oSpriteCanvas.getContext("2d");
var oStyle = oSpriteCanvas.style;
oStyle.position = "absolute";
oStyle.left = oStyle.top = 0;
oStyle.width = oStyle.height = oSpriteCanvas.width = oSpriteCanvas.height = iTileSize;</p>
<p>if (aPalette[aSpriteColors[0]] != "") {
oCanvasCtx.fillStyle = "#" + aPalette[aSpriteColors[0]];
oCanvasCtx.fillRect(0,0,iTileSize,iTileSize);
}</p>
<p>loadSpriteBits(aSpriteColors, aBits, oCanvasCtx, bFlipHori);
return oSpriteCanvas;</p>
<p>} else {
var oWrapSpan = createSpan(),
oSpriteSpan = createSpan(0, 0, iTileSize, iTileSize, aPalette[aSpriteColors[0]]);</p>
<p>loadSpriteBits(aSpriteColors, aBits, oSpriteSpan, bFlipHori);
appChild(oWrapSpan, oSpriteSpan);</p>
<p>return oWrapSpan.innerHTML;
}</p>
<p>},</p>
<p>// convert base-128 string to bitstring
base128ToBitString = function(strData) {
var 	aBits = [],
i = 0,
b;
for (; i &lt; strData.length; i++) {
for (b=6;b&gt;-1;b--)
aBits.push(CHARMAP[strData.charCodeAt(i)] &gt;&gt; b &amp; 1);
}
return aBits;
},</p>
<p>// generate sprite from bitstring
loadSpriteBits = function(aPal, aBits, oSpriteElement, bFlipHori) {
var 	x = 0,
y = 0,
iBitCnt = 0,
bFirstPixel;</p>
<p>while (iBitCnt &lt; aBits.length) {
var 	iColor = (aBits[iBitCnt] &lt;&lt; 1) + aBits[++iBitCnt],
iWidth=0,
bOne = 0;</p>
<p>bFirstPixel = 1;
while (aBits[iBitCnt] == 0 || bFirstPixel) {
iWidth++;
iBitCnt++;
if (++x &gt; 15 || aBits[iBitCnt] == 1){
var iStartX = x;
if (bFlipHori) iStartX = iWidth - x + 16;</p>
<p>plotPixel(aPal[iColor], iStartX, y, oSpriteElement, iWidth);</p>
<p>if (x &gt; 15) {
iWidth = x = 0;
if (++y &gt; 15) return ;
}
}
bFirstPixel = 0;
}
iBitCnt++;</p>
<p>// rewind bitstring if no 1 bits left
if (aBits.length - iBitCnt &lt; 7) {
for (var i=iBitCnt;i<abits></abits> 			if (aBits[i] == 1) bOne = 1;
if (!bOne) {
if (x) y++;
x = iBitCnt = 0;
}
}
}
},</p>
<p>// plot a pixel on span element
plotPixel = bHasCanvas ?
function(iColor, x, y, oCtx, iWidth) {
if (aPalette[iColor] != &#8220;&#8221;) {
oCtx.fillStyle = &#8220;#&#8221; + aPalette[iColor];
oCtx.fillRect(x * iPixSize - iWidth * iPixSize, y * iPixSize, iWidth * iPixSize, iPixSize);
}
} :
function(iColor, x, y, oSpan, iWidth) {
appChild(oSpan,
createSpan(
(x - iWidth) * iPixSize,
y * iPixSize,
iWidth * iPixSize,
iPixSize,
aPalette[iColor]
)
);
},</p>
<p>// convert bitstring to integer
bitsToInt = function(strBits) {
var iVal = 0;
for (var i = 0; i &lt; strBits.length; i++) {
if (charAt(strBits,i) == &#8220;1&#8243;) {
iVal = iVal | (1 &lt;&lt; ((strBits.length-1) - i));
}
}
return iVal;
},</p>
<p>// animate newly spawned coin
animateCoin = function(oCoinElement, iStep) {
oCoinElement.style.top = toInt(oCoinElement.style.top) + iStep;
if (iStep &lt; <img src=\'http://connorm.gknu.com/okanecert/wp-includes/images/smilies/icon_cool.gif\' alt=\'8)\' class=\'wp-smiley\' /> 
setTimer(function (){animateCoin(oCoinElement,iStep + 2);}, 30);
else
collectCoin(toInt(oCoinElement.style.left), toInt(oCoinElement.style.top));
},</p>
<p>// check for tile collisions and return new adjusted position
getTileCollision = function(iOldX, iOldY, iNewX, iNewY) {</p>
<p>var oCol, xAdjust=0;</p>
<p>// moving vertically
if (iOldY != iNewY) {
// moving down
if (iNewY &gt; iOldY) {
// lower left collision
oCol = tileCollides(iNewX + iPixSize, iNewY + iTileSize);
if (oCol &amp;&amp; !tileCollides(iNewX + iPixSize, iNewY)) {
iNewY -= oCol[1];
}</p>
<p>// lower right collision
oCol = tileCollides(iNewX + iTileSize-iPixSize, iNewY + iTileSize);
if (oCol &amp;&amp; !tileCollides(iNewX + iTileSize-iPixSize, iNewY)) {
iNewY -= oCol[1];
}
// moving up
} else {
// upper left collision
oCol = tileCollides(iNewX + iPixSize, iNewY);
if (oCol &amp;&amp; !tileCollides(iNewX + iPixSize, iNewY + iTileSize)) {
iNewY += (iTileSize - oCol[1]);
}</p>
<p>// upper right collision
oCol = tileCollides(iNewX + iTileSize - iPixSize, iNewY);
if (oCol &amp;&amp; !tileCollides(iNewX + iTileSize - iPixSize, iNewY + iTileSize)) {
iNewY += (iTileSize - oCol[1]);
xAdjust = 1;
}
}</p>
<p>}
// moving horizontally
if (iOldX != iNewX) {</p>
<p>// moving right
if (iNewX &gt; iOldX) {</p>
<p>// lower right collision
oCol = tileCollides(iNewX + iTileSize, iNewY + iTileSize-iPixSize);
if (oCol) {
iNewX -= oCol[0];
}</p>
<p>// upper right collision
oCol = tileCollides(iNewX + iTileSize, iNewY);
if (oCol) {
iNewX -= oCol[0];
}</p>
<p>// moving left
} else {</p>
<p>// lower left collision
oCol = tileCollides(iNewX, iNewY + iTileSize-iPixSize);
if (oCol) {
iNewX += (iTileSize - oCol[0]);
}</p>
<p>// upper left collision
oCol = tileCollides(iNewX, iNewY);
if (oCol) {
iNewX += (iTileSize - oCol[0]);
}
}
}</p>
<p>return [iNewX,iNewY,xAdjust];
},</p>
<p>// check if a tile is blocking
tileCollides = function(x, y) {
var tx = floor(x / iTileSize);
var ty = floor(y / iTileSize);</p>
<p>if (aCollisionMap[ty] &amp;&amp; aCollisionMap[ty][tx]) {
return [x - tx * iTileSize, y - ty * iTileSize];
}
},</p>
<p>addPoints = function(iAddPoints) {
iPoints += iAddPoints;</p>
<p>var strPoints = (&#8221;00000&#8243;+iPoints).substr(-5);
setTimer(
function() {
writeText([charAt(strPoints,0),charAt(strPoints,1),charAt(strPoints,2),charAt(strPoints,3),charAt(strPoints,4)], 24*iPixSize, 24*iPixSize, aPointChars);
}, 1
);
},</p>
<p>bPlayerMoveX = 0,</p>
<p>fncKeyUp = function (e) {
var keyCode = (e||event).keyCode;</p>
<p>if (keyCode == 39 || keyCode == 37)
bPlayerMoveX = 0;</p>
<p>if ((keyCode == 17 || keyCode == 38) &amp;&amp; !bPlayerIsOnGround &amp;&amp; iPlayerMovementY &lt; -4)
iPlayerMovementY = -4;
},</p>
<p>fncKeyDown = function (e) {
var keyCode = (e||event).keyCode;
if (keyCode == 39 &amp;&amp; iPlayerMovementX &lt; 1) {
bPlayerMoveX = 1;
iPlayerDirection = 0;
}
if (keyCode == 37 &amp;&amp; iPlayerMovementX &gt; -1) {
bPlayerMoveX = iPlayerDirection = 1;
}
if (keyCode == 17 || keyCode == 38) {
if (bPlayerIsOnGround)
jump();
else
iPreJump = 8;
}
},</p>
<p>fncMoveTimer = function() {
if (bPlayerMoveX) {
if (iPlayerDirection == 0 &amp;&amp; iPlayerMovementX &lt; 6) {
iPlayerMovementX += 1;
} else if (iPlayerMovementX &gt; -6) {
iPlayerMovementX -= 1;
}
} else {
if (iPlayerMovementX &lt; 0)
iPlayerMovementX++;
if (iPlayerMovementX &gt; 0)
iPlayerMovementX&#8211;;
}
setTimer(fncMoveTimer, 50);
},</p>
<p>jump = function() {
iPlayerMovementY = -11 - iJumpBoost;
iJumpBoost = iPreJump = 0;
},</p>
<p>makeSpace = function(n) {
var str = &#8220;&#8221;;
while (n&gt;0) {
str += &#8221; &#8220;; n&#8211;;
}
return str;
},</p>
<p>// &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-
// data
// &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>iPixSize = iScale || 1,
iTileSize = 16 * iPixSize,
CHARMAP = [];</p>
<p>for (var c = 32, i = 0; c &lt; 256; c++) {
CHARMAP[c] = i;
i++;
if (c == 127) c = 160;
if (c == 91) c++;</p>
<p>}</p>
<p>var aFont = [
&#8220;<f> 	&#8220;,&lt;,,,,`&#8221;, // 1
&#8220;_¥&#8217;&gt;]²Á&#8221;, // 2
&#8220;`&amp;,&gt;#¥_&#8221;, // 3
&#8220;.&gt;V¨Á&amp;&amp;&#8221;, // 4
&#8220;À¢À##¥_&#8221;, // 5
&#8220;&gt;P¢À¥¥_&#8221;, // 6
&#8220;Á¥&amp;,888&#8243;, // 7
&#8220;_¥¥_¥¥_&#8221;, // 8
&#8220;_¥¥`#&amp;]&#8221;, // 9
&#8220;¥¹ÁÁ&#8221;,  // M  // yui
&#8220;<v> 	&#8220;À¥¥©¾°©&#8221;, // R
&#8220;`,,,,,`&#8221;, // I
&#8220;_¥¥¥¥¥_&#8221;, // O
&#8221;  B4(4B&#8221;, // x
&#8221;   &#8220;&#8221;, // -
&#8220;¥¥¹¥&#8221;,  // W  // yui
&#8220;PPPPPP`&#8221;, // L
&#8220;¾¨¥¥¥¨¾&#8221;, // D
&#8220;`,,,,,,&#8221;, // T
&#8220;Á¢¢À¢¢Á&#8221;  // E
],//	 	0    1	    2	      3		4	5 	6	 7	  8 	   9	   10	    11	    12
aPalette = [&#8221;",&#8221;FF3900&#8243;,&#8221;AD7B00&#8243;,&#8221;F7D6B5&#8243;,&#8221;000000&#8243;,&#8221;E75A10&#8243;,&#8221;C0FF2B&#8221;,&#8221;00AD00&#8243;,&#8221;F0D0B0&#8243;,&#8221;FFFFFF&#8221;,&#8221;6B8CFF&#8221;,&#8221;39BDFF&#8221;,&#8221;FFA542&#8243;],</p>
<p>aSpriteData = [
&#8220;}\&#8221;¹-º\&#8221;À+º\&#8221;À+º\&#8221;À+º\&#8221;¿¤À ~C_ +º\&#8221;À+º\&#8221;À+º\&#8221;À*P7²OK%¾+½u_\&#8221;À&lt;¡a¡a¡bM@±@ª&#8221;,	//  0 ground
&#8220;a &#8216; ![± 7°³b£[mt<nµ7z> 	&#8220;!A % @,[] ±}°@;µn¦&amp;X£ &lt;$ §¤ 8}}@Prc&#8217;U#Z&#8217;H\'@· ¶\&#8221;is ¤&amp;08@£(&#8221;,			//  2 mario
&#8221;  ´!A.@H#q8¸»e-½n®@±oW:&amp;X¢a&lt;&amp;bbX~# }LWP41}k¬#3¨q#1f RQ@@:4@$&#8221;,			//  3 mario jump
&#8221;   40 q$!hWa-½n¦#_Y}a©,0#aaPw@=cmY<mq> 	&#8220;+hP_@&#8221;,									//  5 pipe left
&#8220;¢,6&lt; R¤&#8221;,									//  6 pipe right
&#8220;@ &amp;  ,&#8217;+hP?&gt;³®&#8217;©}[!»¹.¢_^¥y/pX¸#µ°=a¾½hP?&gt;³®&#8217;©}[!»¹.¢_^  Ba a&#8221;,		//  7 pipe top left
&#8220;@ , !] \&#8221;º £] , <img src=\'http://connorm.gknu.com/okanecert/wp-includes/images/smilies/icon_eek.gif\' alt=\'8O\' class=\'wp-smiley\' /> #7a&amp;+¢ §²!cº 9] P &amp;O ,4    e&#8221;,				//  8 pipe top right
&#8221; £ #! ,! P!!vawd/XO¤8¼&#8217;¤P½»¹²&#8217;9¨  \&#8221;P²Pa²(!¢5!N*(4´b!Gk(a&#8221;,			//  9 goomba
&#8221;   Xu X5 =ou!¯a[Z¼q.°u#|xv ¸··@=~^H&#8217;WOJ!¯a=Nu ²J <j> 	&#8220;@ &amp; !MX ~L \&#8221;y %P *¢ 5a K  w !L \&#8221;y %P *%¬¢ 4  a&#8221;,				// 11 ebox // yui
&#8220;¢ ,\&#8221;²+aN!@ &amp;7 }\&#8221;²+aN!XH # }\&#8221;²+aN!X%  8}\&#8221;²+aN!X%£@ (&#8221;,			// 12 bricks
&#8220;} %¿¢!N° I¨²* 	makeSpace(20) + &#8220;4a }@ }0 N( w$ }\&#8221; N! +aa&#8221;,					// 14 bush left
&#8221; r \&#8221;²y!L%aN zPN NyN#²L}[/cy¾ N&#8221; + makeSpace(18) + &#8220;@&#8221;,			// 15 bush mid
makeSpace(18) + &#8220;++ !R·a!x6 &amp;+6 87L ¢6 P+ 8+ (&#8221;,				// 16 bush right
&#8221; %©¦ +pq 7&gt; \&#8221;³  s&#8221; + makeSpace(25) + &#8220;@&#8221;,					// 17 cloud bottom left
&#8220;a/a_#².Q¥&#8217;¥b}8.£¨7!X\&#8221;K+5cqs%(&#8221; + makeSpace(18) + &#8220;0&#8243;,				// 18 cloud bottom mid
&#8220;bP ¢L P+ 8%a,*a%§@ J&#8221; + makeSpace(22) + &#8220;(&#8221;,					// 19 cloud bottom right
&#8220;&#8221;,			// 20 mushroom
&#8220;&#8221;,	// koopa 16&#215;24
&#8220;&#8221;,				// 22 star
&#8220;&#8221;,							// 23 flagpole
&#8220;&#8221;,			// 24 flag
&#8220;&#8221;,					// 25 flagpole top
&#8221;  6  ~  }a }@ }0 }( }$ }\&#8221; }! } a} @} 0} (} $} \&#8221;² $&#8221;,				// 26 hill slope
&#8220;a } \&#8221;m %8 *P!MF 5la\&#8221;y %P&#8221; + makeSpace(18) + &#8220;(&#8221;,				// 27 hill mid
makeSpace(30) + &#8220;%\&#8221; t!DK \&#8221;q&#8221;,							// 28 hill top
&#8220;&#8221;,			// 29 castle bricks
&#8220;&#8221;,							// 30 castle doorway bottom
&#8220;&#8221;,					// 31 castle doorway top
&#8220;&#8221;,			// 32 castle top
&#8220;&#8221;,			// 33 castle top 2
&#8220;&#8221;,				// 34 castle window right
&#8220;&#8221;,				// 35 castle window left
&#8220;&#8221;,			// 36 castle flag
makeSpace(19) + &#8220;8@# (9F*RSf.8  A¢$!¢040HD&#8221;,					// 37 goomba flat
&#8221;     *(!¬#q³¡[_´Yp~¡=&lt;¥g=&amp;&#8217;PaS²¿ Sbq*<em> 	&#8221;   =  ³ #b &#8216;N¶ Z½Z Z½Z Z½Z Z½Z Z½Z Z½Z =[q ²@ ³  ¶   0&#8243;,			// 39 coin step 1
&#8221;   ?@ /q /e &#8216;¤ #³ !ºa }@ N0 ?( /e &#8216;¤ #³  ¿  _a  \&#8221;",				// 40 coin step 2
&#8221;   /  &gt;  ]  º !² #¢ %a +  &gt;  ]  º !² #¢ &#8216;a  \&#8221;",				// 41 coin step 3
&#8221;   7¢ +² *] %&gt; \&#8221;p !Ga t¢ I² 4º *] %&gt; \&#8221;p  ¡  Oa  \&#8221;"				// 42 coin step 4
],aPalette1=[0,1,2,12],
aPalette2=[0,4,6,7],
aPalette3=[0,4,9,11],
aPalette4=[0,9,5,12];</p>
<p>aSpriteHTML = [&#8221;",
loadSpriteData([5,4,0,3], aSpriteData[0]),		// 01	Ground
loadSpriteData([3,4,5,0], aSpriteData[1]),		// 02	Question Box
loadSpriteData(aPalette2, aSpriteData[5]),		// 03	Pipe Left
loadSpriteData(aPalette2, aSpriteData[6]),		// 04	Pipe Right
loadSpriteData(aPalette2, aSpriteData[7]),		// 05	Pipe Top Left
loadSpriteData(aPalette2, aSpriteData[8]),		// 06	Pipe Top Right
loadSpriteData([0,3,4,5], aSpriteData[10]),		// 07	Coin
loadSpriteData([5,4,0,8], aSpriteData[12]),		// 08	Bricks
loadSpriteData([5,4,0,3], aSpriteData[11]),		// 09	Empty Question Box
loadSpriteData([4,0,5,8], aSpriteData[13]),		// 10	Block
loadSpriteData([0,4,5,3], aSpriteData[9]),		// 11	Goomba
loadSpriteData(aPalette1, aSpriteData[2]),		// 12	Mario
loadSpriteData(aPalette1, aSpriteData[3]),		// 13	Mario Jump
loadSpriteData(aPalette1, aSpriteData[4]),		// 14	Mario Run
loadSpriteData(aPalette1, aSpriteData[2],1),		// 15	Mario (Flipped)
loadSpriteData(aPalette1, aSpriteData[3],1),		// 16	Mario Jump (Flipped)
loadSpriteData(aPalette1, aSpriteData[4],1),		// 17	Mario Run (Flipped)
loadSpriteData([0,4,5,3], aSpriteData[9],1),		// 18	Goomba (Flipped)
loadSpriteData(aPalette2, aSpriteData[14]),		// 19	Bush Left
loadSpriteData(aPalette2, aSpriteData[15]),		// 20	Bush Mid
loadSpriteData(aPalette2, aSpriteData[16]),		// 21	Bush Right
loadSpriteData(aPalette3, aSpriteData[14]),		// 22	Cloud Left
loadSpriteData(aPalette3, aSpriteData[15]),		// 23	Cloud Mid
loadSpriteData(aPalette3, aSpriteData[16]),		// 24	Cloud Right
loadSpriteData(aPalette3, aSpriteData[17]),		// 25	Cloud Bottom Left
loadSpriteData(aPalette3, aSpriteData[18]),		// 26	Cloud Bottom Mid
loadSpriteData(aPalette3, aSpriteData[19]),		// 27	Cloud Bottom Right
loadSpriteData([0,4,7,0], aSpriteData[26]),		// 28	Hill Slope
loadSpriteData([0,4,7,0], aSpriteData[26], 1),		// 29	Hill Slope (Flipped)
loadSpriteData([7,4,7,0], aSpriteData[27]),		// 30	Hill Mid
loadSpriteData([0,4,7,0], aSpriteData[28]),		// 31	Hill Top
loadSpriteData([7,4,7,0], &#8220;&#8221;),				// 32	Hill Mid (Full Color)
loadSpriteData([12,4,5,0], aSpriteData[1]),		// 33	Question Box (Second Color)
loadSpriteData(aPalette1, aSpriteData[38]),		// 34	Mario Dead
loadSpriteData([0,4,5,3], aSpriteData[37]),		// 35	Goomba Flat
loadSpriteData(aPalette4, aSpriteData[39]),		// 36	Coin anim state 1
loadSpriteData(aPalette4, aSpriteData[40]),		// 37	Coin anim state 2
loadSpriteData(aPalette4, aSpriteData[41]),		// 38	Coin anim state 3
loadSpriteData(aPalette4, aSpriteData[42]),		// 39	Coin anim state 4
];</p>
<p>var strMapPipes = &#8220;,ªh2}-r@vca&#8221;,
strMapClouds = &#8220;(eRAr&amp;¦B),F¤@f2E0u¤¨3eO2^)¸H0¢¥65*wK0®¥g0&#8243;,
strMapBushes = &#8220;~fVGzB©;=L¹TMv¸y|F¯KU¯^¤7;~6»[&#8221;, // yui
strMapHills = &#8220;&amp;®|R·/V~{¼n|g°=I¯±W_wV¢&#8221;,
strMapHillsRight = &#8220;&#8216;®¥S%/¸£|\&#8221;n½i°AI¿²Waw_¢&#8221;,</p>
<p>aMapData = [
[&#8221;AQ&#8217;f&gt;58v¦|2¾&#8221;,0,0],							// holes			[66,12,67,12,83,12,84,12,85,12,150,12,151,12]
[strMapPipes,5,1],							// pipes (top left)		[25,10,35,9,43,8,54,8,160,10,176,10]
[strMapPipes,6,1,1],							// pipes (top right)		[25,10,35,9,43,8,54,8,160,10,176,10]
[strMapPipes,3,1,0,1,1],						// pipes (bottom left)		[25,10,35,9,43,8,54,8,160,10,176,10]
[strMapPipes,4,1,1,1,1],						// pipes (bottom left)		[25,10,35,9,43,8,54,8,160,10,176,10]
[&#8221;&amp;¦E1:f2^cNKUM§f6]{k¬lVO§`wp0&#8243;, 2, 1],					// coin qboxes			[13,9,18,9,19,5,20,9,61,8,75,9,91,5,91,9,98,9,103,9,106,5,106,9,109,9,126,5,127,5,167,9]
[&#8221;"],									// mushroom/flower qboxes
[&#8221;(¦G1LssmkUI§Gv@v*uktJrK%LvTw,}´¸K~O%_w x¶¡µEn:U)&#8221;, 8, 1],		// bricks			[17,9,19,9,21,9, 74,9, 76,9, 77,5,78,5,79,5,80,5,81,5,82,5,83,5,84,5, 88,5,89,5,90,5, 97,9, 115,9, 118,5,119,5,120,5, 125,5,128,5, 126,9,127,9, 165,9,166,9,168,9]
[strMapBushes,19,0,-1],							// bushes left
[strMapBushes,21,0,1],							// bushes right
[strMapBushes,20,0],							// bushes			[9,11,10,11,11,11,21,11,39,11,40,11,57,11,58,11,59,11,69,11,87,11,88,11,105,11,106,11,107,11,117,11,135,11,136,11,155,11,165,11,203,11]
[strMapClouds,27,0,1,1],						// cloud bottom right
[strMapClouds,25,0,-1,1],						// cloud bottom left
[strMapClouds,22,0,-1],							// cloud top left
[strMapClouds,24,0,1],							// cloud top right
[strMapClouds,23,0],							// cloud top			[17,1,25,2,26,2,27,2,34,1,35,1,54,2,65,1,73,2,82,1,83,1,102,2,113,1,121,2,122,2,123,2,130,1,131,1,150,2,161,1,169,2,170,2,171,2,178,1,179,1,198,2]
[strMapClouds,26,0,0,1],						// cloud bottom
[strMapHills,31,0,1,-1],						// hills top
[strMapHills,28,0],							// hills left slope		[13,11,45,11,46,10,61,11,93,11,94,10,109,11,141,11,142,10,157,11,189,11,190,10,205,11]
[strMapHills,30,0,1],							// hills mid spots (left)
[strMapHills,32,0,2],							// hills mid blank
[strMapHillsRight,29,0],						// hills right slope		[15,11,49,11,48,10,63,11,97,11,96,10,111,11,145,11,144,10,159,11,193,11,192,10,207,11]
[strMapHillsRight,30,0,-1],						// hills mid spots (right)
[&#8221;b°)HL£r)eJQZgNCY5Dµ4ew3(m¨UI~®xSvsVy|&gt;°­°IZF.¢&#8221;,10,1,0,0,1],		// blocks  // yui		[131,11,132,10,133,9,134,8,137,8,138,9,139,10,140,11,145,11,146,10,147,9,148,8,149,8,152,8,153,9,154,10,155,11,178,11,179,10,180,9,181,8,182,7,183,6,184,5,185,4,186,4,195,11]
[	23,12,-24,1,
41,12,-4,1,
52,12,-7,1,
50,12,-5,3,
94,12,-8,36,
92,12,-6,38,
111,12,-25,19,
109,12,-23,21,
121,12,-35,9,
119,12,-33,11,
125,12,-39,5,
123,12,-37,7,
79,5,-2,5,
77,5,0,7
]							// goombas</p>
<p>],</p>
<p>aSounds = [
// very small, very simple mario theme. Sequenced by Mike Martel.
&#8220;data:audio/mid;base64,TVRoZAAAAAYAAQAEAMBNVHJrAAAAGQD/UQMFe3EA/1gEBAIYCAD/WQIAAAD/LwBNVHJrAAABqwD/AwRCYXNzAP8gAQAAsAdhAMAjhgCQJGGCHoAkQAeQK1qCB5AwXAeAK0CBUZApVQSAMECCJJAwWQmAKUCCD5ApVwGAMECBRJAkXQyAKUCCC5AoWQSAJECCC5ArXA+AKEBGgCtAB5AwU4UjgDBAAZArXIFMgCtAAZAkWYIjkCtYBIAkQIIYkDBXDYArQIEsgDBACZApXIITgClABJAwWYILgDBAA5ApVoFJkCRcAoApQIFPkCxsBIAkQIISgCxABpAubIIEkDBiBIAuQII7kCtiA4AwQDmAK0AgkCtWgUKQJGUQgCtAgQ6AJEAqkCRZgiKQK1gJgCRAgg6AK0AAkDBZgUmAMEADkClOghiQMFEBgClAggiAMEAFkClTgUmQJFwGgClAgiSQKFYLgCRAggiQK1oOgChAT5AwVQOAK0CFFIAwQASQK1aBOJAkXAWAK0CCMJArXASAJECCF4ArQAKQMFeBRpApUwKAMECCHYApQAKQMFaCFoAwQAiQKUGBN5AkWg2AKUCBN5AsbBCAJECCFoAsQAOQLnGCCpAwZAKALkCFEoAwQAD/LwBNVHJrAAACSAD/AwZNZWxvZHkA/yABAQCxB38AwRmHTJFPXyuBT0AskU5mKYFOQDaRTWU3gU1ALpFLdU6BS0BtkUxiaYFMQFeRRFlJgURAEpFFalqBRUALkUhxgUqRRVwIgUhAUZFIbg6BRUBAgUhAB5FKZ3uBSkCBM5FPZDWBT0AhkU5nLYFOQDGRTWUzgU1AKZFLX4EzgUtAE5FMZ36BTEAnkVRugR2BVEAvkVRkRYFUQBmRVGSCfYFUQIFPkU9nMIFPQCqRTmcmgU5AN5FNZjeBTUArkUtlMoFLQIEikUxhQoFMQHiRRFRYkUVhAYFEQFmBRUAJkUhqgUCRRWECgUhAWZFIbAiBRUBDgUhACpFKc4FigUpASJFLdoIFgUtAHZFKc4IEgUpADZFIaYMcgUhAhCuRT2Q4gU9AJJFOZi+BTkAukU1fMoFNQC6RS2qBV4FLQAWRTF6BTpFETx6BTEAxkUVnB4FEQF+RSGANgUVAgSqRRV4IgUhAV5FIYhqBRUAugUhACJFKX4E4gUpAd5FPZS2BT0ArkU5qLIFOQDSRTWBTgU1AEpFLaoFGkUxXBIFLQIEEgUxAMpFUX4ENgVRAKpFUXjqBVEAckVRkgxCBVECBO5FPV1eRTlwWgU9APYFOQBKRTVYugU1ALZFLbIE3kUxUAoFLQIFwkUROCYFMQFSBREAMkUU6U5FIXAGBRUCBLIFIQAmRRVNRgUVACJFIXEyBSEAIkUpBghqBSkALkUtzgguBS0AFkUpnghuBSkAHkUNmhjaBQ0AA/y8ATVRyawAAACwA/wMYU2VxdWVuY2VkIGJ5IE1pa2UgTWFydGVsAP8gAQcAtwdkAMcAAP8vAA&#8221;,</p>
<p>&#8220;data:,&#8221;,
// game over. Sequenced by John N. Engelmann.
&#8220;data:audio/mid;base64,TVRoZAAAAAYAAQADAHhNVHJrAAAAggD/AwlHYW1lIE92ZXIA/wMpZnJvbSBTdXBlciBNYXJpbyBCcm90aGVycyBvbiB0aGUgTmludGVuZG8A/wEHVW5rbndvbgD/ASBTZXF1ZW5jZWQgYnkgSm9obiBOLiBFbmdlbG1hbm4uCgD/WAQDAhgIAP9ZAgAAAP9RAwYagAD/LwBNVHJrAAABAAD/IQEAAP8DB1NxdWFyZXMAwEoAsAduAApAAJBAZABIZDxIAABAADw8ZABDZDxDAAA8ADw3ZABAZFpAAAA3AABBZABFZEVFAAFHZEVHAAFFZEZFAABBAABBZABEZFpEAABGZFpGAABEZFpEAABBAABAZABDZC1DAABAAAA+ZABBZC1BAAA+AABAZABDZIE0sAduDAdtDAdsDAdrDAdqDAdpDAdoDAdnDAdmDAdlDAdkDAdjDAdiDAdhDAdgDAdfDAdeDAddDAdcDAdbDAdaDAdZDAdYDAdXDAdWDAdVDAdUDAdTDAdSDAdRDJBDAABAAACwB1CBcJBBAAFBAAD/LwBNVHJrAAAAywD/IQEAAP8DCFRyaWFuZ2xlAMJKALIHbgAKQACSN2QAK2Q8KwAANwA8NGQAKGQ8KAAANAA8MGQAJGRaJAAAMAAAKWQANWSBUDUAACkAAiVkADFkgg4kZAAwZA8xAAAlAIF/sgduDAdtDAdsDAdrDAdqDAdpDAdoDAdnDAdmDAdlDAdkDAdjDAdiDAdhDAdgDAdfDAdeDAddDAdcDAdbDAdaDAdZDAdYDAdXDAdWDAdVDAdUDAdTDAdSDAdRDJIkAAAwAACyB1AA/y8A&#8221;
],</p>
<p>playMusic = function(iSoundID, bLoop) {
if (!bMusic) return;
var oEmbed = dc(&#8221;embed&#8221;);
oEmbed.src = aSounds[iSoundID];
oEmbed.id = &#8220;sound_&#8221; + iSoundID;
if (bLoop) oEmbed.setAttribute(&#8221;loop&#8221;, &#8220;true&#8221;);
oEmbed.setAttribute(&#8221;autostart&#8221;, &#8220;true&#8221;);
oEmbed.style.position = &#8220;absolute&#8221;;
oEmbed.style.left = -1000;
appChild(document.body, oEmbed);
},</p>
<p>// kill player
die = function() {
if (bMusic) {
document.body.removeChild(getElement(&#8221;sound_0&#8243;));
playMusic(1);
}</p>
<p>setPlayerState(3);
bIsDead = 1;
iPlayerMovementY = -8;</p>
<p>},</p>
<p>// &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;
// init game
// &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>oMainElement = getElement(&#8221;game&#8221;);</p>
<p>oLevelElement = appChild(oMainElement, createSpan(0,0,208*iTileSize,13*iTileSize, aPalette[10]));</p>
<p>oMainElement.style.height = 13 * iTileSize;
oMainElement.style.width = 256*iPixSize;</p>
<p>// write static UI strings
writeText([10,11,12,13,14], 24*iPixSize, 16*iPixSize);
writeText([17,14,12,18,19], 144*iPixSize, 16*iPixSize);
writeText([0,16,0], 152*iPixSize, 24*iPixSize);
writeText([20,13,10,21], 200*iPixSize, 16*iPixSize);</p>
<p>appChild(oMainElement, createSpan(80*iPixSize, 20*iPixSize, iTileSize, iTileSize, &#8220;&#8221;, aSpriteHTML[7]))</p>
<p>// write dynamic UI strings
var aPointChars = writeText([0,0,0,0,0], 24*iPixSize, 24*iPixSize),
aCoinChars = writeText([15,0,0], 96*iPixSize, 24*iPixSize),
aTimeChars = writeText([2,0,0], 208*iPixSize, 24*iPixSize),</p>
<p>aGoombas = [];</p>
<p>// generate level
(function(){
var i, l, aCurMap;</p>
<p>for (i = 0; i &lt; 13; i++) {
aMapRows[i] = [];
aTileMap[i] = [];
aCollisionMap[i] = [];
}</p>
<p>// ground blocks
for (i = 0; i &lt; 208; i++) {
aMapRows[12][i] = 1;
aCollisionMap[12][i] = 1;
}</p>
<p>// setup blocks and collision
for (var m in aMapData) {
aCurMap = aMapData[m];
if (aCurMap[0]) {
var strBits = base128ToBitString(aCurMap[0]).join(&#8221;"),
aCoords = [];
i = 0;
while (i + 12 &lt;= strBits.length) {
aCoords.push(bitsToInt(strBits.substring(i, i + 8)));
aCoords.push(bitsToInt(strBits.substring(i + 8, i + 12)));
i += 12;
}
var iOffX = aCurMap[3] || 0;
var iOffY = aCurMap[4] || 0;</p>
<p>for (i = 0; i &lt; aCoords.length; i += 2) {
var iHeight = 1;
if (aCurMap[5])
iHeight = 12 - (aCoords[i+1] + iOffY);</p>
<p>while (&#8211;iHeight &gt; -1) {
var iRow = aCoords[i+1] + iOffY + iHeight,
iCol = aCoords[i] + iOffX;
if (aMapRows[iRow]) {
aMapRows[iRow][iCol] = aCurMap[1];
aCollisionMap[iRow][iCol] = aCurMap[2];
}
}
}</p>
<p>}
}</p>
<p>var aCoinBoxes = [];</p>
<p>// draw block sprites
for (i=0;i&lt;13;i++) {
for (l=0;l&lt;208;l++) {
if (aMapRows[i][l]) {
if (aMapRows[i][l] == 2) {
aTileMap[i][l] = drawTile(
l, i, 2, 33
);
aCoinBoxes.push(aTileMap[i][l]);
} else {
aTileMap[i][l] = drawTile(
l, i, aMapRows[i][l]
);
}
if (l &gt; 32) showHide(aTileMap[i][l]);
}
}
}</p>
<p>// setup flashing coin boxes timer
var bCoinBoxFlash = 0;
var fncFlashCoinBoxes =
function() {
for (var i = 0; i &lt; aCoinBoxes.length; i++) {
showHide(child(aCoinBoxes[i], 1), bCoinBoxFlash);
}
bCoinBoxFlash = !bCoinBoxFlash;
setTimer(fncFlashCoinBoxes, 100);
};
setTimer(fncFlashCoinBoxes, 800);</p>
<p>// create goombas
aCurMap = aMapData[24];
for (i=0; i<acurmap i+="4)"></acurmap> 		var oGoombaElement = appChild(oLevelElement,
createSpan(aCurMap[i] * iTileSize, (aCurMap[i + 1] - 1) * iTileSize, iTileSize, iTileSize, &#8220;&#8221;, aSpriteHTML[11])
);</p>
<p>appChild(oGoombaElement, createSpan(aCurMap[i] * iTileSize, (aCurMap[i + 1] - 1) * iTileSize, iTileSize, iTileSize, &#8220;&#8221;, aSpriteHTML[18]).childNodes[0]);
appChild(oGoombaElement, createSpan(aCurMap[i] * iTileSize, (aCurMap[i + 1] - 1) * iTileSize, iTileSize, iTileSize, &#8220;&#8221;, aSpriteHTML[35]).childNodes[0]);
showHide(oGoombaElement.childNodes[2]);</p>
<p>aGoombas.push(oGoombaElement);</p>
<p>oGoombaElement.m1 = (aCurMap[i + 2] + aCurMap[i]) * iTileSize;
oGoombaElement.m2 = (aCurMap[i + 3] + aCurMap[i]) * iTileSize;
oGoombaElement.d = -1;
}</p>
<p>// setup goomba walk/flip animation timer
var bGoombaFlipped = false;
var fncFlipGoomba =
function() {
for (var i = 0; i &lt; aGoombas.length; i++) {
if (!aGoombas[i].de) {
showHide(aGoombas[i].childNodes[0], bGoombaFlipped);
showHide(aGoombas[i].childNodes[1], !bGoombaFlipped);
}
}
bGoombaFlipped=!bGoombaFlipped;
setTimer(fncFlipGoomba, 300);
};
setTimer(fncFlipGoomba, 300);</p>
<p>// setup coin animation timer
var iCoinState = 0;
var fncAnimCoin =
function() {
for (var i = 0; i &lt; aCoinSprites.length; i++) {
if (aCoinSprites[i]) {
showHide(aCoinSprites[i].s[0]);
showHide(aCoinSprites[i].s[1]);
showHide(aCoinSprites[i].s[2]);
showHide(aCoinSprites[i].s[3]);
}
showHide(aCoinSprites[i].s[iCoinState],1);
}
iCoinState++;
if (iCoinState == 4) iCoinState = 0;
setTimer(fncAnimCoin, 100);
};
setTimer(fncAnimCoin, 500);</p>
<p>})();
// end level generation</p>
<p>// setup player sprite
oPlayerElement = appChild(oLevelElement, createSpan(4*iTileSize,4*iTileSize,iTileSize,iTileSize)),
aPlayerStates = [
appChild(oPlayerElement, createSpan(0, 0, iTileSize, iTileSize, &#8220;&#8221;, aSpriteHTML[12])), // stand right
appChild(oPlayerElement, createSpan(0, 0, iTileSize, iTileSize, &#8220;&#8221;, aSpriteHTML[13])), // walk right
appChild(oPlayerElement, createSpan(0, 0, iTileSize, iTileSize, &#8220;&#8221;, aSpriteHTML[14])), // jump right
appChild(oPlayerElement, createSpan(0, 0, iTileSize, iTileSize, &#8220;&#8221;, aSpriteHTML[34])), // dead</p>
<p>appChild(oPlayerElement, createSpan(0, 0, iTileSize, iTileSize, &#8220;&#8221;, aSpriteHTML[15])), // stand left
appChild(oPlayerElement, createSpan(0, 0, iTileSize, iTileSize, &#8220;&#8221;, aSpriteHTML[16])), // walk left
appChild(oPlayerElement, createSpan(0, 0, iTileSize, iTileSize, &#8220;&#8221;, aSpriteHTML[17])), // jump left
appChild(oPlayerElement, createSpan(0, 0, iTileSize, iTileSize, &#8220;&#8221;, aSpriteHTML[34]))  // dead
];</p>
<p>setPlayerState(0);</p>
<p>var aCoinSprites = [],</p>
<p>gameCycle = function() {
var	oPlayerStyle = oPlayerElement.style,
iCurX = toInt(oPlayerStyle.left),
iCurY = toInt(oPlayerStyle.top),
iNewX = toInt(oPlayerStyle.left) + (iPlayerMovementX * iPixSize),
iNewY = toInt(oPlayerStyle.top) + (iPlayerMovementY * iPixSize),
oCollideTile,
i,
iNewTileY = floor(iNewY / iTileSize),
iNewState,
iMoveX = iPlayerMovementX;</p>
<p>if (iNewTileY &gt; 0 &amp;&amp; !bIsDead) {</p>
<p>bPlayerIsOnGround = 0;</p>
<p>oCollideTile = getTileCollision(iCurX, iCurY, iNewX, iNewY);</p>
<p>// collision
if (oCollideTile) {</p>
<p>// player could not move lower, must be on ground now
if (oCollideTile[1] &lt; iNewY) {
bPlayerIsOnGround = 1;
iPreJump = 0;
}</p>
<p>// player could not move higher, must be falling now
if (oCollideTile[1] &gt; iNewY) {
iPlayerMovementY = 1;</p>
<p>var cx = floor(oCollideTile[0] / iTileSize + 0.5);</p>
<p>var iBlockY = oCollideTile[1] / iTileSize - 1;</p>
<p>// check if we hit a coin box
if (aMapRows[iBlockY][cx] == 2) {</p>
<p>aMapRows[iBlockY][cx] = 9;</p>
<p>oLevelElement.removeChild(aTileMap[iBlockY][cx]);</p>
<p>aTileMap[iBlockY][cx] = appChild(oLevelElement,
createSpan(cx * iTileSize, iBlockY * iTileSize, iTileSize, iTileSize, &#8220;&#8221;, aSpriteHTML[9])
);
aTileMap[iBlockY][cx].style.top = (iBlockY * iTileSize) - iPixSize * 4;
setTimer(function() {aTileMap[iBlockY][cx].style.top = (iBlockY * iTileSize) - iPixSize * 2}, 50);
setTimer(function() {aTileMap[iBlockY][cx].style.top = (iBlockY * iTileSize) - iPixSize}, 100);
setTimer(function() {aTileMap[iBlockY][cx].style.top = (iBlockY * iTileSize)}, 150);</p>
<p>// spawn coin
aMapRows[iBlockY-1][cx] = -1;
var oCoin = aTileMap[iBlockY-1][cx] = drawTile(cx, iBlockY-1, 36);
oCoin.s = [
child(oCoin,0),				// front face
appChild(oCoin, child(createSpan(cx * iTileSize, (iBlockY-1) * iTileSize, iTileSize, iTileSize, &#8220;&#8221;, aSpriteHTML[37]),0)),
appChild(oCoin, child(createSpan(cx * iTileSize, (iBlockY-1) * iTileSize, iTileSize, iTileSize, &#8220;&#8221;, aSpriteHTML[38]),0)), // sideways
appChild(oCoin, child(createSpan(cx * iTileSize, (iBlockY-1) * iTileSize, iTileSize, iTileSize, &#8220;&#8221;, aSpriteHTML[39]),0))
];</p>
<p>showHide(oCoin.s[0],1);
showHide(oCoin.s[1]);
showHide(oCoin.s[2]);
showHide(oCoin.s[3]);</p>
<p>aCoinSprites.push(oCoin);
animateCoin(oCoin,-8);
}</p>
<p>}</p>
<p>// set new position to collision adjusted coords
iNewX = oCollideTile[0];
iNewY = oCollideTile[1];</p>
<p>}</p>
<p>iNewX = toInt(iNewX);
iNewY = toInt(iNewY);</p>
<p>if (iNewY &gt;= (12 * iTileSize)) {
die();
}</p>
<p>if (bPlayerIsOnGround) {
iPlayerMovementY = 1;
if (iMoveX != 0) {
if (iPlayerWalking == 0) {
iPlayerWalkCycle = 1;
iNewState = 0;
} else if (iPlayerWalking == 2){
iPlayerWalkCycle = -1;
iNewState = 2;
}
iPlayerWalking+=iPlayerWalkCycle;
} else iNewState = 0;
} else {
iNewState = 1;
}</p>
<p>// coin collect
if (aMapRows[round(iNewY / iTileSize)][floor(iNewX / iTileSize + 0.5)] == -1) {
collectCoin(iNewX, iNewY);
}</p>
<p>}</p>
<p>// constantly increase fall speed to the max
if (iPlayerMovementY &lt; <img src=\'http://connorm.gknu.com/okanecert/wp-includes/images/smilies/icon_cool.gif\' alt=\'8)\' class=\'wp-smiley\' /> iPlayerMovementY++;</p>
<p>// even dead marios fall
oPlayerStyle.top = iNewY;</p>
<p>if (!bIsDead) {
oPlayerStyle.left = iNewX;</p>
<p>if (oPlayerElement.offsetLeft+oLevelElement.offsetLeft &gt; (bContScroll ? 132*iPixSize : 192*iPixSize)) iScrollX = bContScroll ? -4*iPixSize : -80*iPixSize;
if (oPlayerElement.offsetLeft+oLevelElement.offsetLeft &lt; (bContScroll ? 124*iPixSize : 48*iPixSize)) iScrollX = bContScroll ? 4*iPixSize : 96*iPixSize;</p>
<p>// move goombas and check for goomba collision
var bKilledGoomba = 0;
for (i in aGoombas) {
var 	oGoomba = aGoombas[i],
iGoombaX = toInt(oGoomba.style.left) + oGoomba.d * iPixSize;</p>
<p>if (!oGoomba.de) {
oGoomba.style.left = iGoombaX;
if (iGoombaX &lt; oGoomba.m1) oGoomba.d = 1;
if (iGoombaX &gt; oGoomba.m2) oGoomba.d = -1;</p>
<p>var iHitX = ((iGoombaX / iTileSize) - (iNewX + iPixSize*8) / iTileSize)
var iHitY = ((toInt(oGoomba.style.top) / iTileSize) - (iNewY + iPixSize*8) / iTileSize)</p>
<p>// player has x collision with goomba
if (iHitX &lt;= 0.5 &amp;&amp; iHitX &gt;= -1.5) {
// player has y collision with goomba
if (iHitY &lt;= 0.5 &amp;&amp; iHitY &gt;= -1.5) {</p>
<p>// player above goomba and moving down, kill goomba
if (iPlayerMovementY &gt; 0 &amp;&amp; toInt(oGoomba.style.top) &gt; iNewY) {
oGoomba.de = 1;
oGoomba.style.top = toInt(oGoomba.style.top) + iPixSize * 2;</p>
<p>showHide(oGoomba.childNodes[0]);
showHide(oGoomba.childNodes[1]);
showHide(oGoomba.childNodes[2], 1);</p>
<p>bKilledGoomba = true;
addPoints(100);
} else {
// close x contact
if (iHitX &lt;= 0.5 &amp;&amp; iHitX &gt;= -1.5) {
// kill player
die();
}
}
}
}
}
}
if (bKilledGoomba) {
iJumpBoost = 1;
if (iPreJump &gt; 0) {
jump();
} else {
iPlayerMovementY = -3;
}
}</p>
<p>if (iNewState&gt;-1) setPlayerState(iNewState);
}
iPreJump&#8211;;</p>
<p>setTimer(gameCycle, 32);
},</p>
<p>collectCoin = function(iX, iY)
{
iCoinsCollected++;
aTileMap[round(iY / iTileSize)][floor(iX / iTileSize + 0.5)].innerHTML = &#8220;&#8221;;
aMapRows[round(iY / iTileSize)][floor(iX / iTileSize + 0.5)] = 0;</p>
<p>var strCoins = iCoinsCollected+&#8221;";
if (strCoins.length &lt; 2) strCoins = 0 + strCoins;</p>
<p>writeText([15,charAt(strCoins,0),charAt(strCoins,1)], 96*iPixSize, 24*iPixSize, aCoinChars);
addPoints(100);
},</p>
<p>checkScroll = function() {
if (iScrollX != 0) {
var x;</p>
<p>if (bContScroll) {
if (iScrollX &gt; 0)
x = 4*iPixSize;
else
x = -4*iPixSize;
} else {
if (iScrollX &gt; 0)
x = 8*iPixSize;
else
x = -8*iPixSize;
}</p>
<p>var iNewX = toInt(oLevelElement.style.left) + x;</p>
<p>if (iNewX &lt; 0) {
oLevelElement.style.left = iNewX;
var 	iLeftX = floor(-iNewX / iTileSize)-1,
iRightX = iLeftX + 17,
bShowRight;
if (x &gt; 0) {
iRightX++;
iLeftX++;
bShowRight = 1;
}
for (var iRow in aTileMap) {
var aRow = aTileMap[iRow];
if (aRow[iRightX]) showHide(aRow[iRightX], !bShowRight);
if (aRow[iLeftX]) showHide(aRow[iLeftX], bShowRight);
}
}
iScrollX -= x;
}
setTimer(checkScroll, 32);
}</p>
<p>// start game</p>
<p>setTimer(gameCycle, 5);
setTimer(updateTime, 1000);
setTimer(checkScroll, 50);
setTimer(fncMoveTimer, 50);</p>
<p>playMusic(0, true);</p>
<p>// we have to move focus from the embedded music to the game container
setTimer(
function() {
oMainElement.focus();
}, 100
);
document.onkeyup = fncKeyUp;
document.onkeydown = fncKeyDown;</p>
<p>}</p>
<p></em></j></mq></nµ7z></v></f>
</script></p>
]]></content:encoded>
			<wfw:commentRss>http://connorm.gknu.com/okanecert/general/mario/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Okibatsu</title>
		<link>http://connorm.gknu.com/okanecert/general/okibatsu/</link>
		<comments>http://connorm.gknu.com/okanecert/general/okibatsu/#comments</comments>
		<pubDate>Mon, 11 Feb 2008 16:32:06 +0000</pubDate>
		<dc:creator>connaa</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://connorm.gknu.com/okanecert/general/okibatsu/</guid>
		<description><![CDATA[Okibatsu is the new word for SEO. I&#8217;m Going to win this one.
]]></description>
			<content:encoded><![CDATA[<p>Okibatsu is the new word for SEO. I&#8217;m Going to win this one.</p>
]]></content:encoded>
			<wfw:commentRss>http://connorm.gknu.com/okanecert/general/okibatsu/feed/</wfw:commentRss>
		</item>
		<item>
		<title></title>
		<link>http://connorm.gknu.com/okanecert/general/44/</link>
		<comments>http://connorm.gknu.com/okanecert/general/44/#comments</comments>
		<pubDate>Mon, 04 Feb 2008 01:05:31 +0000</pubDate>
		<dc:creator>connaa</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://connorm.gknu.com/okanecert/general/44/</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p><a TITLE="wig.png" HREF="http://connorm.gknu.com/okanecert/wp-content/uploads/2008/02/wig.png"><img ALT="wig.png" SRC="http://connorm.gknu.com/okanecert/wp-content/uploads/2008/02/wig.png" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://connorm.gknu.com/okanecert/general/44/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Okanecert Over&#8230; or is it</title>
		<link>http://connorm.gknu.com/okanecert/general/okanecert-over-or-is-it/</link>
		<comments>http://connorm.gknu.com/okanecert/general/okanecert-over-or-is-it/#comments</comments>
		<pubDate>Sun, 13 Jan 2008 01:24:53 +0000</pubDate>
		<dc:creator>connaa</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://connorm.gknu.com/okanecert/general/okanecert-over-or-is-it/</guid>
		<description><![CDATA[Well the okanecert competition is over and the prized ahave been awarded. I was so close to placing in the top three. There were a few things holding me back. all other bloggers interested in SEO take this into consideration:
Download the Google XML Sitemap plugin and tell to to only update the front page. The frontpage
contains content and the same content is diplayed on another page. thsi plugin will tell the crawlers not
to index these pages. Whats the Benefit? Hide duplicate content&#8230; in googles&#8217; eye duplicate content
deserves a big oki batsu. this is why cat was fisrt no duplicate content. Also don&#8217;t change your theme mis [...]]]></description>
			<content:encoded><![CDATA[<p>Well the <a HREF="http://connorm.gknu.com/okanecert/wp-admin/post-new.php#">okanecert</a> competition is over and the prized ahave been awarded. I was so close to placing in the top three. There were a few things holding me back. all other bloggers interested in SEO take this into consideration:</p>
<p>Download the Google XML Sitemap plugin and tell to to only update the front page. The frontpage<br />
contains content and the same content is diplayed on another page. thsi plugin will tell the crawlers not<br />
to index these pages. Whats the Benefit? Hide duplicate content&#8230; in googles&#8217; eye duplicate content<br />
deserves a big oki batsu. this is why cat was fisrt no duplicate content. Also don&#8217;t change your theme mis comp&#8230;. this is no good. do not change your tile , keep your title to include the name of the keyword you are competing with. The word <strong><em><a HREF="http://www.google.com/search?client=opera&amp;rls=en&amp;q=okanecert&amp;sourceid=opera&amp;ie=utf-8&amp;oe=utf-8">okanecert was ours. </a></em></strong><strong><em> </em></strong>i will continue to go up b/c i fixed all my problemss.</p>
]]></content:encoded>
			<wfw:commentRss>http://connorm.gknu.com/okanecert/general/okanecert-over-or-is-it/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Make The Transition</title>
		<link>http://connorm.gknu.com/okanecert/general/make-the-transition/</link>
		<comments>http://connorm.gknu.com/okanecert/general/make-the-transition/#comments</comments>
		<pubDate>Tue, 01 Jan 2008 20:58:11 +0000</pubDate>
		<dc:creator>connaa</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://connorm.gknu.com/okanecert/general/make-the-transition/</guid>
		<description><![CDATA[I Just Made the transition from adsense to Text-Link-Ads. Its So much better and easier. I &#60;3 TLA
]]></description>
			<content:encoded><![CDATA[<p>I Just Made the transition from adsense to Text-Link-Ads. Its So much better and easier. I &lt;3 TLA</p>
]]></content:encoded>
			<wfw:commentRss>http://connorm.gknu.com/okanecert/general/make-the-transition/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Okanecert Up date</title>
		<link>http://connorm.gknu.com/okanecert/general/okanecert-up-date/</link>
		<comments>http://connorm.gknu.com/okanecert/general/okanecert-up-date/#comments</comments>
		<pubDate>Wed, 05 Dec 2007 21:12:42 +0000</pubDate>
		<dc:creator>connaa</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://connorm.gknu.com/okanecert/general/okanecert-up-date/</guid>
		<description><![CDATA[i don&#8217;t understand why i&#8217;m not winning the okanecert competition. I have a pR 3
]]></description>
			<content:encoded><![CDATA[<p>i don&#8217;t understand why i&#8217;m not winning the okanecert competition. I have a pR 3</p>
]]></content:encoded>
			<wfw:commentRss>http://connorm.gknu.com/okanecert/general/okanecert-up-date/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Template DownLoads</title>
		<link>http://connorm.gknu.com/okanecert/uncategorized/template-downloads/</link>
		<comments>http://connorm.gknu.com/okanecert/uncategorized/template-downloads/#comments</comments>
		<pubDate>Fri, 19 Oct 2007 13:59:42 +0000</pubDate>
		<dc:creator>connaa</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://connorm.gknu.com/okanecert/?p=18</guid>
		<description><![CDATA[I am an active member of OpenDesigns.Org and I currenly have submitted 5 of my original XHTML/CSS templates. 4 of which are currently active and the 5th is pending approval. Between the 4 i have over 1300 DL&#8217;s! You can download my templates at TODC or at my site www.conartistdesign.com/templates , Enjoy! 
]]></description>
			<content:encoded><![CDATA[<p>I am an active member of OpenDesigns.Org and I currenly have submitted 5 of my original XHTML/CSS templates. 4 of which are currently active and the 5th is pending approval. Between the 4 i have over 1300 DL&#8217;s! You can download my templates at <a HREF="http://www.opendesigns.org/profile/?user=conartistdesigns" TARGET="_blank">TODC</a> or at my site<a HREF="http://www.conartistdesign.com/templates" TARGET="_blank"> www.conartistdesign.com/templates</a> , Enjoy!<a HREF="http://www.opendesigns.org/profile/?user=conartistdesigns" TARGET="_blank"> </a></p>
]]></content:encoded>
			<wfw:commentRss>http://connorm.gknu.com/okanecert/uncategorized/template-downloads/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Seo contest updates</title>
		<link>http://connorm.gknu.com/okanecert/uncategorized/seo-contest-updates/</link>
		<comments>http://connorm.gknu.com/okanecert/uncategorized/seo-contest-updates/#comments</comments>
		<pubDate>Fri, 12 Oct 2007 22:03:29 +0000</pubDate>
		<dc:creator>connaa</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://connorm.gknu.com/okanecert/?p=11</guid>
		<description><![CDATA[Yeah so i&#8217;m doing pretty good. I&#8217;m in second place behind cat. But max is coming close, so i&#8217;m a like scared about who will win the okanecert competion.
]]></description>
			<content:encoded><![CDATA[<p>Yeah so i&#8217;m doing pretty good. I&#8217;m in second place behind cat. But max is coming close, so i&#8217;m a like scared about who will win the <a HREF="http://www.connorm.gknu.com/okanecert">okanecert</a> competion.</p>
]]></content:encoded>
			<wfw:commentRss>http://connorm.gknu.com/okanecert/uncategorized/seo-contest-updates/feed/</wfw:commentRss>
		</item>
		<item>
		<title>SEO</title>
		<link>http://connorm.gknu.com/okanecert/uncategorized/seo/</link>
		<comments>http://connorm.gknu.com/okanecert/uncategorized/seo/#comments</comments>
		<pubDate>Thu, 04 Oct 2007 15:16:14 +0000</pubDate>
		<dc:creator>connaa</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://connorm.gknu.com/okanecert/?p=9</guid>
		<description><![CDATA[In the Search engine Optimization I learned that certain things can lower your ranking because of search engine spam. Spam includes: unrelated keywords, redirects, Gibberish, etc&#8230; These tricks along with many others are easily detected by search engines and have a bad affect or the search engines perception of the site.
I also learned the difference [...]]]></description>
			<content:encoded><![CDATA[<p>In the Search engine Optimization I learned that certain things can lower your ranking because of search engine spam. Spam includes: unrelated keywords, redirects, Gibberish, etc&#8230; These tricks along with many others are easily detected by search engines and have a bad affect or the search engines perception of the site.</p>
<p>I also learned the difference between a search engine and a directory. A search engine utilize crawlers and directories are updated by people. DMOZ provides results for a variety of search engines.</p>
]]></content:encoded>
			<wfw:commentRss>http://connorm.gknu.com/okanecert/uncategorized/seo/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Okanecert Again</title>
		<link>http://connorm.gknu.com/okanecert/uncategorized/okanecert-again/</link>
		<comments>http://connorm.gknu.com/okanecert/uncategorized/okanecert-again/#comments</comments>
		<pubDate>Wed, 03 Oct 2007 15:20:53 +0000</pubDate>
		<dc:creator>connaa</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://connorm.gknu.com/okanecert/?p=8</guid>
		<description><![CDATA[I&#8217;m Just Trying to update my page.  Okanecert
]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m Just Trying to update my page.  <a TARGET="_blank" TITLE="Okanecert" HREF="http://www.connorm.gknu.com/okanecert">Okanecert</a></p>
]]></content:encoded>
			<wfw:commentRss>http://connorm.gknu.com/okanecert/uncategorized/okanecert-again/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
