<?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>psychicsoftware | Category Archives: Musclecar Online</title>
	<atom:link href="https://www.psychicsoftware.com/category/musclecar-online/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.psychicsoftware.com</link>
	<description></description>
	<lastBuildDate>Fri, 23 Jan 2026 11:29:07 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.1</generator>
	<item>
		<title>Musclecar Online 82% of the way to top 100 in Steam Greenlight</title>
		<link>https://www.psychicsoftware.com/2014/musclecar-online-82-of-the-way-to-top-100-in-steam-greenlight/</link>
		<comments>https://www.psychicsoftware.com/2014/musclecar-online-82-of-the-way-to-top-100-in-steam-greenlight/#comments</comments>
		<pubDate>Fri, 17 Oct 2014 19:22:32 +0000</pubDate>
		<dc:creator><![CDATA[sam]]></dc:creator>
				<category><![CDATA[Musclecar Online]]></category>

		<guid isPermaLink="false">http://www.psychicsoftware.com/?p=708</guid>
		<description><![CDATA[Musclecar Online is now 82% of the way to the top 100 games on Steam Greenlight. Let&#8217;s give it a last push and get the game released on the biggest appstore for PC and Mac gamers! If we get released on Steam, I will commit to adding the following features to the game, which have [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.psychicsoftware.com/musclecar-greenlight.php" style="float:left; padding:4px;"><img src="http://www.musclecar-online.com/musclecar-82percentv2.jpg"></a> Musclecar Online is now 82% of the way to the top 100 games on <a href="http://www.psychicsoftware.com/musclecar-greenlight.php">Steam Greenlight</a>.</p>
<p>Let&#8217;s give it a last push and get the game released on the biggest appstore for PC and Mac gamers!</p>
<p>If we get released on Steam, I will commit to adding the following features to the game, which have been the main things that the players have been asking me for:</p>
<p>1. Making it &#8216;proper&#8217; 3D driving, with..<br />
2. Hilly/Offroad terrain circuits.. which can be sculpted in the track designer<br />
3. Springy offroad suspension (see technical demo of this below)<br />
4. Bridges<br />
5. Customised, player-uploaded car skins</p>
<p>Here&#8217;s some details on the offroad suspension I have been working on: <a target='_blank' href='http://www.psychicsoftware.com/2014/raycast-car/'>Shiva Raycast Car</a></p>
<p><iframe width="600" height="450" src="//www.youtube.com/embed/pZY9Z3Dp698" frameborder="0" allowfullscreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>https://www.psychicsoftware.com/2014/musclecar-online-82-of-the-way-to-top-100-in-steam-greenlight/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Musclecar Online Update</title>
		<link>https://www.psychicsoftware.com/2013/musclecar-online-update/</link>
		<comments>https://www.psychicsoftware.com/2013/musclecar-online-update/#comments</comments>
		<pubDate>Wed, 24 Jul 2013 13:01:39 +0000</pubDate>
		<dc:creator><![CDATA[sam]]></dc:creator>
				<category><![CDATA[Musclecar Online]]></category>

		<guid isPermaLink="false">http://www.psychicsoftware.com/?p=607</guid>
		<description><![CDATA[My &#8216;versus ghost&#8217; social racing game, Musclecar Online, is now live in a few places: the Mac appstore, Android Google Play, and BlackBerry PlayBook App World. You can also get it for Windows/Mac/Linux on the game&#8217;s website. Hell, we even have a Facebook page For the moment the big test is maybe the Android appstore, [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>My &#8216;versus ghost&#8217; social racing game, Musclecar Online, is now live in a few places: the <a target="_blank" href="https://itunes.apple.com/app/musclecar-online/id663294528?ls=1&#038;mt=12">Mac appstore</a>, <a target="_blank" href="https://play.google.com/store/apps/details?id=com.psychicsoftware.musclecaronline">Android Google Play</a>, and <a target="_blank" href="http://appworld.blackberry.com/webstore/content/32306889">BlackBerry PlayBook App World</a>.</p>
<p>You can also get it for <a target="_blank" href="http://www.musclecar-online.com">Windows/Mac/Linux on the game&#8217;s website</a>.<br />
Hell, we even have a <a target="_blank" href="https://www.facebook.com/musclecaronline">Facebook page</a> <img src="https://www.psychicsoftware.com/wp-includes/images/smilies/icon_wink.gif" alt=";-)" class="wp-smiley" /></p>
<p>For the moment the big test is maybe the Android appstore, where downloads have been solid if not astounding. After a few days it&#8217;s now just breaking into the top 100 &#8216;new free racing games&#8217; list &#8211; so maybe this will bring some increased traction. While the &#8216;new&#8217; list on Google Play is a great concept, it&#8217;s always inundated with massively varied quality items, ranging from poorly designed wallpaper image apps (masquerading as games just long enough to spam you with adverts), to 200 clones of whatever lightweight crap is popular this month, right thru to high budget 3D racers. So getting some visibility even there isn&#8217;t always easy. The top ranking apps in the &#8216;new free&#8217; lists are getting tens of thousands of downloads in a week or two, while getting to the top of the &#8216;paid&#8217; list requires maybe 10 sales. Tells you something huh&#8230;</p>
<p>The Musclecar Online player-base is growing steadily; we&#8217;re currently getting a couple of hundred new downloads a day and by day-end we&#8217;re seeing upwards of 100 users posting laps in the more popular cars. The next couple of weeks will be interesting, and maybe we&#8217;ll see whether there&#8217;s any viral potential in the social features I worked so hard on! </p>
<p>The game is launching on Desura soon, and if you get a chance to upvote it on Steam Greenlight that would be most cool <img src="https://www.psychicsoftware.com/wp-includes/images/smilies/icon_wink.gif" alt=";-)" class="wp-smiley" /></p>
<p><a href="http://www.desura.com/games/musclecar-online" target="_blank" title="Musclecar Online on Desura"><img src="http://button.desura.com/play/outline/games/23573.png" alt="Desura Digital Distribution" width="252" height="54" border="0" /></a> &nbsp; <a target="_blank" href="http://steamcommunity.com/sharedfiles/filedetails/?id=161306094"><img src="http://www.musclecar-online.com/screenshots/steam_logo_dark.png"></a></p>
<p>Here&#8217;s a couple of screenshots from the new 3D camera viewpoint, added in version 1.3:</p>
<p><img src="http://www.musclecar-online.com/screenshots/ss-3d-01.jpg" alt="" /></p>
<p><img src="http://www.musclecar-online.com/screenshots/ss-3d-02.jpg" alt="" /></p>
<p>and here&#8217;s the most recent teaser movie made for the Android store:</p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/hE_qWXDQ2Rk" frameborder="0" allowfullscreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>https://www.psychicsoftware.com/2013/musclecar-online-update/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Musclecar Online &#8211; making good progress</title>
		<link>https://www.psychicsoftware.com/2013/musclecar-online-making-good-progress/</link>
		<comments>https://www.psychicsoftware.com/2013/musclecar-online-making-good-progress/#comments</comments>
		<pubDate>Fri, 31 May 2013 13:01:11 +0000</pubDate>
		<dc:creator><![CDATA[sam]]></dc:creator>
				<category><![CDATA[Musclecar Online]]></category>

		<guid isPermaLink="false">http://www.psychicsoftware.com/?p=598</guid>
		<description><![CDATA[I have been making good progress with my &#8220;social versus-ghost racer&#8221; Musclecar Online. A bunch of friends and Darkwind players have been testing it and having a bit of fun in the process. The game is functionally almost complete at this stage, and we have been listed on indedb.com as well as being approved for [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>I have been making good progress with my &#8220;social versus-ghost racer&#8221; <a href='http://www.musclecar-online.com/'>Musclecar Online</a>. A bunch of friends and <a href='http://www.dark-wind.com'>Darkwind</a> players have been testing it and having a bit of fun in the process.</p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/daeK60x4g7s" frameborder="0" allowfullscreen></iframe></p>
<p>The game is functionally almost complete at this stage, and we have been listed on <a href='http://www.indiedb.com/games/musclecar-online'>indedb.com</a> as well as being approved for distribution by <a href='http://www.desura.com'>Desura.com</a>. I have pretty much decided it will be free-to-play on every possible platform, with monetization* via in-game purchases and (where appropriate) adverts.</p>
<p>*monetization: somehow that word only looks right with an American spelling. Lol.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.psychicsoftware.com/2013/musclecar-online-making-good-progress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Making an efficient gameserver with node.js and mysql (Musclecar Online)</title>
		<link>https://www.psychicsoftware.com/2013/making-an-efficient-gameserver-with-node-js-and-mysql-musclecar-online/</link>
		<comments>https://www.psychicsoftware.com/2013/making-an-efficient-gameserver-with-node-js-and-mysql-musclecar-online/#comments</comments>
		<pubDate>Mon, 29 Apr 2013 10:58:52 +0000</pubDate>
		<dc:creator><![CDATA[sam]]></dc:creator>
				<category><![CDATA[Musclecar Online]]></category>
		<category><![CDATA[Techie]]></category>

		<guid isPermaLink="false">http://www.psychicsoftware.com/?p=547</guid>
		<description><![CDATA[Last year, when one of my games went a bit viral, I discovered first-hand about the alarming inefficiency of Apache (webserver), especially when running PHP which forces you to accept a process-per-request approach. It became pretty clear that something much more lightweight would be required if I wanted to build gameservers with large player-bases in [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Last year, <a href="http://www.psychicsoftware.com/2012/dont-launch-a-ddos-on-your-own-website/">when one of my games went a bit viral</a>, I discovered first-hand about the alarming inefficiency of Apache (webserver), especially when running PHP which forces you to accept a process-per-request approach. It became pretty clear that something much more lightweight would be required if I wanted to build gameservers with large player-bases in mind.</p>
<p>After some research I have settled on <a href="http://nodejs.org/">node.js</a> as a good solution. It&#8217;s very well regarded, largely due to its non-blocking, asynchronous model. This essentially means that anytime a resource is required (such as a database recordset) the request goes into a queue, to be called back when the resource is retrieved. In Apache, the model is blocking &#8211; the process sits and waits for the resource, thereby stopping any other activity.. this is why Apache needs all those independent processes, so that it can serve multiple clients simultaneously.</p>
<p><img style="float:right; padding:5px;" src="http://www.dark-wind.com/images/avatars/speed-racer2.gif" alt="speedracer" /> The game I have been working on is &#8216;Musclecar Online&#8217; &#8211; a top-down racer in which players build their own tracks, vote on them, and then everyone in the world races on the same track-of-the-day. Rather than being real-time, you race against the &#8216;ghost lap&#8217; recordings of other players; kinda like Speed Racer <img src="https://www.psychicsoftware.com/wp-includes/images/smilies/icon_wink.gif" alt=";-)" class="wp-smiley" /></p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/nl3g4QCLZ_o" frameborder="0" allowfullscreen></iframe></p>
<p><strong>Cache stuff in RAM</strong></p>
<p>Linux has a server&#8217;s approach to the file system, of course, which means it uses all available RAM for caching disk files and such, but I figured it would be even better to make liberal use of Javascript arrays (which are really hash tables.. excellent for key-based lookups). So the server packs up canned responses into strings, as much as possible, ready for delivering over the interweb with no fuss or processing. This includes:</p>
<ul>a 5-day pack of track layouts, allowing the players to see what&#8217;s coming up over the next few days;</ul>
<ul>per-cartype, per-second frequency bins, succinctly providing the data needed by the client to display a histogram of worldwide laptimes and point out where the player stands versus these;</ul>
<ul>a temporary array of ghost lap recordings, hashed by user ID for easy over-writing when they improve. This is only used up until 40 players have recorded laps for that car type on that day&#8217;s track, and allows random &#8216;unclassified&#8217; packs of ghost laps to be delivered to players without the need to bother MySql about it;</ul>
<ul>more long-term packs of ghost lap recordings, separated into 6 divisions (F thru A) &#8211; the idea is that the player starts off racing against poor ghosts, labelled as division F, and if they beat these they are allowed to progress to division E, and so on. These longer-term packs are re-generated periodically, but not for the first time until 40 recordings are available for the car type.</ul>
<p><strong>Don&#8217;t fall into the ORDER BY RAND() trap</strong></p>
<p>I have done some pretty naive stuff in MySql in the past, but running <a href="http://www.dark-wind.com/">Darkwind </a>for the past 7 years has helped me understand efficient database design and querying. With the characters, vehicles and weapons tables running into the millions, I was forced to. One of the newbie gotchas in MySql is to avoid doing a massive SELECT statement with ORDER BY RAND() LIMIT 1 in order to get a random record. If you do this, you&#8217;re basically asking the database server to load an entire table into memory, apply a random number to each record, sort the whole damn thing, and return one row. There&#8217;s a few obvious solutions, depending on how well distributed the data in your index fields is. One simple way is just to find your data range (e.g. laptimes min and max), generate a random number in this range, and then SELECT the first row greater than or equal to this laptime, LIMIT 1. Assuming laptimes is an index field, and also assuming there are enough records to make a reasonably even distribution across the data range, this works nicely.</p>
<p><strong>Interesting asynchronous design solutions</strong></p>
<p>Now, I love callbacks as much as the next man, but it can be an old-fashioned PITA sometimes trying to work with asynchronous coding. In a nutshell, anytime you want a resource that may be delayed (database query, file read etc.) you can&#8217;t use a traditional flow of control, can&#8217;t use loops for multiple accesses, etc. One of the things I have to do in the &#8216;Musclecar Online&#8217; server is build packs of typical ghost lap recordings, in order to pack them into strings ready for dispatch to the clients. This means querying for each row with a separate SELECT statement, and therefore means 11 car types x 6 divisions x 5 different packs x 4 ghosts per pack =  1320 queries. Embedding each query inside the callback of the previous one certainly isn&#8217;t an option, but with a little thought I settled on recursion; a perfect way to unravel the asynchronous tangle. This works nice and efficiently, while still operating in serial (and therefore not choking up any server resources) and allowing nice tidy code. It&#8217;s kind of strange I didn&#8217;t see recursion mentioned as a solution anywhere on the web while researching node.js. Well, maybe I didn&#8217;t look for too long.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.psychicsoftware.com/2013/making-an-efficient-gameserver-with-node-js-and-mysql-musclecar-online/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>


<!-- Begin Cookie Consent plugin by Silktide - http://silktide.com/cookieconsent -->
<script type="text/javascript">
    window.cookieconsent_options = {"message":"This website uses cookies to ensure you get the best experience","dismiss":"Got it!","learnMore":"More info","link":"http://www.psychicsoftware.com/privacy-policy/","theme":"dark-bottom"};
</script>

<script type="text/javascript" src="//s3.amazonaws.com/cc.silktide.com/cookieconsent.latest.min.js"></script>
<!-- End Cookie Consent plugin -->

