tag:blogger.com,1999:blog-22354787719226095602024-02-02T08:27:12.787-08:00XNA AmateurismDedicated to solving as many problems as I create!Jeffhttp://www.blogger.com/profile/03124500762526773156noreply@blogger.comBlogger12125tag:blogger.com,1999:blog-2235478771922609560.post-90207619237832714832009-03-19T09:33:00.000-07:002009-03-19T09:36:28.892-07:00Blog moved!This blog has moved! The new address is <a href="http://www.1amstudios.com/blog/">http://www.1amstudios.com/blog/</a>.<br /><br />To say thanks for following the blog to its new home, there is a video and NFS:XNA is finally available for download!Jeffhttp://www.blogger.com/profile/03124500762526773156noreply@blogger.com0tag:blogger.com,1999:blog-2235478771922609560.post-24949573321812153162008-12-09T05:52:00.000-08:002008-12-09T05:56:33.094-08:00Making it playable...Up till now, NFS:XNA has been largely a tech-demo.<br /><br />Right now I'm adding some simple playability - being able to finish races and get back to the main menu to choose another race are two things i've added tonight :)<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRo31dWU0evLWyNlUK6tS04Oxrv_mLO1bksD9cXVLeaUgRLnvMzJfmrK2CLhMqCPqWrqmR0h9ybxWfScnIjN-UVs0NQuGVPd0YNaH5JULK6g8QhBGEjT5yulZhEZ2MClQ3m9hYyUX5hma_/s1600-h/race-stats.jpg"><img style="cursor: pointer; width: 320px; height: 217px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRo31dWU0evLWyNlUK6tS04Oxrv_mLO1bksD9cXVLeaUgRLnvMzJfmrK2CLhMqCPqWrqmR0h9ybxWfScnIjN-UVs0NQuGVPd0YNaH5JULK6g8QhBGEjT5yulZhEZ2MClQ3m9hYyUX5hma_/s320/race-stats.jpg" alt="" id="BLOGGER_PHOTO_ID_5277788051065605698" border="0" /></a>Jeffhttp://www.blogger.com/profile/03124500762526773156noreply@blogger.com0tag:blogger.com,1999:blog-2235478771922609560.post-167818006499086202008-11-24T12:38:00.000-08:002008-11-24T13:05:09.522-08:00Latest NFS:XNA updatesI've been a bit quiet on the blog lately, but doing lots of work on Need For Speed.<br /><br />Latest stuff:<br /><ul><li>7 cars</li><li>16 tracks</li><li>Car dashboards</li><li>Car/environment sounds</li><li>Fence/grass/gravel collision detection<br /></li></ul>Got a bunch of little things to do, but the next big thing will be some kind of radial/motion blur.<br /><br />Obligatory screenshots -<br /><br />Car selection screen:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikm0c7UDwCCTpAvTZJRdIg1Yshau-Pj7pO-GL7mUIqM6eBshU3UFzpuPbG8M_JUB972FMbspgyBSpd1DIyxK6nVrnb0a7kcVntmg8mZAS-eSOU7c87TkNJmIJ8ZWKlBGjNbSa7iJ4abi_0/s1600-h/Image1.jpg"><img style="cursor: pointer; width: 320px; height: 249px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikm0c7UDwCCTpAvTZJRdIg1Yshau-Pj7pO-GL7mUIqM6eBshU3UFzpuPbG8M_JUB972FMbspgyBSpd1DIyxK6nVrnb0a7kcVntmg8mZAS-eSOU7c87TkNJmIJ8ZWKlBGjNbSa7iJ4abi_0/s320/Image1.jpg" alt="" id="BLOGGER_PHOTO_ID_5272328605311420578" border="0" /></a><br /><br />Vertigo Ridge track:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgE32MPrEiFfu1m3yzFSyONiQFGevoTsnT7QNGMKKIfzUDajoC7HJn48kfuKrGcsO3gf34hK2O3plqZ56_-qtJqGvpItCWpMzLwEZDuKaMOgtihfDmZAqobJk9fAiqx8vg04pwHikriT5cP/s1600-h/Image11.jpg"><img style="cursor: pointer; width: 320px; height: 238px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgE32MPrEiFfu1m3yzFSyONiQFGevoTsnT7QNGMKKIfzUDajoC7HJn48kfuKrGcsO3gf34hK2O3plqZ56_-qtJqGvpItCWpMzLwEZDuKaMOgtihfDmZAqobJk9fAiqx8vg04pwHikriT5cP/s320/Image11.jpg" alt="" id="BLOGGER_PHOTO_ID_5272330878570211058" border="0" /></a><br /><br />Burnt Sienna track:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhD9-LbzbMhB8dAOCQeXFtDbz024fB7uCx9tUC5yu4nNNhfHR6Ve1gnsdUy8eViADwg6R0yhEIgoheEJ7OXsHewLsxl6esR_i3TrLgdkAJiHNHl6sQa0dpvvnUK05bKP3pfORuv9JP0N1BF/s1600-h/Image12.jpg"><img style="cursor: pointer; width: 320px; height: 239px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhD9-LbzbMhB8dAOCQeXFtDbz024fB7uCx9tUC5yu4nNNhfHR6Ve1gnsdUy8eViADwg6R0yhEIgoheEJ7OXsHewLsxl6esR_i3TrLgdkAJiHNHl6sQa0dpvvnUK05bKP3pfORuv9JP0N1BF/s320/Image12.jpg" alt="" id="BLOGGER_PHOTO_ID_5272331174093949154" border="0" /></a><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEif6NOTn0zHlIuh5d_td2PoA9bsKCC8FcpMHnjZUkDWNqjFIt_EP2PrsKDeNrFxCv8WDDA6l2hz13E3F6E6TZxGrkspqxbxJw5IyTlig6pZnEsVLZHMUDeB6Mc5kAK3XaIGbk6EjYvl18oe/s1600-h/Image13.jpg"><img style="cursor: pointer; width: 320px; height: 239px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEif6NOTn0zHlIuh5d_td2PoA9bsKCC8FcpMHnjZUkDWNqjFIt_EP2PrsKDeNrFxCv8WDDA6l2hz13E3F6E6TZxGrkspqxbxJw5IyTlig6pZnEsVLZHMUDeB6Mc5kAK3XaIGbk6EjYvl18oe/s320/Image13.jpg" alt="" id="BLOGGER_PHOTO_ID_5272331367976840114" border="0" /></a><br /><br />Alpine open-road track:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkG7KpCGqNQHYpvIsdi4f69qSGQgYAzZG7IAiCcaygwpoflHL_LiWv4PuNd1UxySmGKo0nig9ui_eA1-bYSo2a_y9vIJEoYfflry-BQVTm_Lkcp5PopV9pY9jPQJ2kgOwTDd1evQaSS_Lc/s1600-h/Image15.jpg"><img style="cursor: pointer; width: 320px; height: 240px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkG7KpCGqNQHYpvIsdi4f69qSGQgYAzZG7IAiCcaygwpoflHL_LiWv4PuNd1UxySmGKo0nig9ui_eA1-bYSo2a_y9vIJEoYfflry-BQVTm_Lkcp5PopV9pY9jPQJ2kgOwTDd1evQaSS_Lc/s320/Image15.jpg" alt="" id="BLOGGER_PHOTO_ID_5272331607008983410" border="0" /></a><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixf48j23g2vEvRDxaw8PclcN3-vPUCXln8cEmRwBFCnr7_bCp_ViU4wm2hCEWnpH3n9NXpV31eDwQX0NPoUjoySN7IrnDnOErtVoqEKDMgEvD3Pjf9vuBGuaDTulX_RPKALRDREPCT1hV8/s1600-h/Image16.jpg"><img style="cursor: pointer; width: 320px; height: 242px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixf48j23g2vEvRDxaw8PclcN3-vPUCXln8cEmRwBFCnr7_bCp_ViU4wm2hCEWnpH3n9NXpV31eDwQX0NPoUjoySN7IrnDnOErtVoqEKDMgEvD3Pjf9vuBGuaDTulX_RPKALRDREPCT1hV8/s320/Image16.jpg" alt="" id="BLOGGER_PHOTO_ID_5272331745787581890" border="0" /></a>Jeffhttp://www.blogger.com/profile/03124500762526773156noreply@blogger.com2tag:blogger.com,1999:blog-2235478771922609560.post-20510900130838510222008-11-03T17:17:00.000-08:002008-11-03T18:38:23.283-08:00Chase camera for fast-moving objectsChase cameras are great for creating a feeling of realistic motion. For NFS, it means you can see the side of the car as you turn, and as the car accelerates and brakes it changes distance from the camera.<br /><br />The problem with a fast moving game like this one, is that the chase camera can start to get too far behind the object at high speed. <br /><br />Simply reducing the springiness doesn't work, as then the camera won't swing round the X-axis enough.<br /><br />I've used the <a href="http://creators.xna.com/en-US/sample/chasecamera">Chase Camera sample</a> for my camera, and added an extra ZStiffness property. This controls how much the camera tries to keep up with the moving object. <br /><br />You can <a href="http://www.sturm.net.nz/xna/chasecamera.cs">download</a> it here :)Jeffhttp://www.blogger.com/profile/03124500762526773156noreply@blogger.com0tag:blogger.com,1999:blog-2235478771922609560.post-30542110915923058182008-11-02T16:21:00.000-08:002008-11-02T16:23:54.353-08:00I was way off the mark...Damn. I got the wrong info from somewhere about dynamic audio and XNA - there is NO support for loading audio at runtime through XNA 3. <br /><br />That was the main thing I've been looking forward to :(<br /><br />Of course, if you don't care about running on the xbox, you can use any audio engine accessible from c# (fmod, wmp etc)Jeffhttp://www.blogger.com/profile/03124500762526773156noreply@blogger.com0tag:blogger.com,1999:blog-2235478771922609560.post-60104119557931618322008-10-28T03:23:00.001-07:002008-10-28T04:28:21.674-07:00New chase camera<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3nYVwknU9q_SH0PuV08qjBDwVlvPEGWW2V9_ZO5MMdK3i0XqEbc6vk91t713DO-JSVuE4WoEdSoQFm5zvszEqhuKAznxk6AB-A-IMR2ohf2Y4CgifM0LpeEp4bg0OySKI4I_iC3ijwb9n/s1600-h/Image2.jpg"><img style="cursor: pointer; width: 320px; height: 240px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3nYVwknU9q_SH0PuV08qjBDwVlvPEGWW2V9_ZO5MMdK3i0XqEbc6vk91t713DO-JSVuE4WoEdSoQFm5zvszEqhuKAznxk6AB-A-IMR2ohf2Y4CgifM0LpeEp4bg0OySKI4I_iC3ijwb9n/s320/Image2.jpg" alt="" id="BLOGGER_PHOTO_ID_5262165091191554050" border="0" /></a><br /><br />Just finished a chase camera that can be moved around with the xbox controller.<br /><br />And yes, the rev counter works :)<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEllmidAlTB4meGdmnI5RWT8UPpAd2gyRqezaNV3LzdouHVCdsvElr41FKq6tEGyaS5BQAH-1L7QTyWtpW4A_hzl5mWldcipRc1JZMb1iKd-2PkZ-6gzfiaL-puKWnFCnvS04EZ02mFbKb/s1600-h/Image2.jpg"><br /></a>Jeffhttp://www.blogger.com/profile/03124500762526773156noreply@blogger.com0tag:blogger.com,1999:blog-2235478771922609560.post-9521844676900437212008-10-27T13:31:00.000-07:002008-10-27T21:20:13.687-07:00XNA Vehicle PhysicsI've tried several different physics engines for XNA:NFS.<br /><br />I tried <a href="http://www.codeplex.com/JigLibX">JigLibX</a> first, as it had the coolest vehicle demo, but after a considerable amount of pain getting it integrated, it was difficult to get the vehicle to behave in the same way as the demo. And once it got to a certain speed, it started to rock side to side, with no obvious way to stop it.<br /><br />Up next was <a href="http://bepu-games.com/BEPUphysics/">BepuPhysics</a>. This has a pretty basic looking vehicle demo, but was quite easy to integrate. <br />Basically you define your terrain (from a list of vertices), give it some properties like friction and gravity. Then you create a Vehicle, attach some Wheels and hook up a button press to wheel.Accelerate();<br /><br />Getting it running initially only took a couple of hours - but trying to figure out values to make the vehicle behave correctly still had me tearing hair out days later. <br /><br />The problem is that its all a very fine balance of forces. For example, one bumpy part of the track was pitching the vehicle backwards and forwards and looked ridiculous. The solution? Make the suspension softer to counteract the bumps. But making the suspension softer caused it to wallow/float around the corners, sometimes tipping over. The solution? Increase the sideways stiffness, and give the car more mass to stabilise it. This then pushed the softened suspension down too far. And so it went on, round and round.<br /><br />After almost quitting the whole project, I saw <a href="http://hamboeck.blogspot.com/2008/03/marco-monsters-car-physics-demo-in-xna.html">this post</a> which is a simple 2d vehicle physics class. Using it as a starting point, I've ended up writing my own vehicle physics. Granted, it will never be anything as good as what Bepu/JigLibX could produce in the right hands, but it means I can choose which corners to cut and focus on making it a fun experience to drive.<br /><br />Demo coming soon :)Jeffhttp://www.blogger.com/profile/03124500762526773156noreply@blogger.com0tag:blogger.com,1999:blog-2235478771922609560.post-35331365244775736902008-10-20T17:46:00.000-07:002008-10-20T17:58:06.842-07:00Dynamic audio and XNA 3XNA 2.0's lack of dynamic audio - no ContentManager.Load<Audio><audio>(filename) - is a real problem for XNA Need for Speed.<br /><br />All resources are loaded from the Need For Speed binary files at runtime, which works fine for models and textures, but not audio.<br /><br />I have code to dynamically generate a wave file from the sound data contained in the Need for Speed soundbank files, but right now its useless as theres no way to load the wave file.<br /><br />All that is going to change in XNA 3. The CTP is out right now, but my friend Sharky (of <a href="http://sharky.bluecog.net/">Air Legends</a> fame) pointed me to a <a href="http://creators.xna.com/en-us/xna_goes_live_october30th">page</a> where the official release date has been announced as October 30th. As in 9 days away :)<br /><br />This should also see the XNA NES emulators suddenly get audio support.</audio>Jeffhttp://www.blogger.com/profile/03124500762526773156noreply@blogger.com0tag:blogger.com,1999:blog-2235478771922609560.post-3801578501297430722008-10-20T03:31:00.000-07:002008-10-20T04:04:20.097-07:00XNA Performance ProfilingFinally having all the main bits working in XNA NFS, I was looking at the performance, which wasn't great, even on my fairly decent PC.<br /><br />I first went through my normal optimization - limiting the number of DrawPrimitive() calls. After bringing it down to only the minimum of calls (by only drawing a small part of the track), I still had an annoying camera 'jump' every second or so. This is at a pretty even 50-60 fps windowed (ie, maxed for my refresh rate).<br /><br />After going through my camera classes and not finding anything wrong, I figured I'd try profiling it - although given the framerate I didnt expect to find anything unusual.<br /><br />A quick google of XNA performance profiling turned up a link to <a href="http://nprof.sourceforge.net/Site/Description.html">nProf</a> - a freeware & open source .NET profiler.<br /><br /><br />Here is a screenshot of the nProf window after running for a couple of minutes.<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjY2216zPq2IrmUbYvbO6g-YYKWjs8mvU7GQaNBnhOVEx-3_VH18mSMMl01pBbzCDAQ0kx6f2hgyg5esRePlrhMSu9MsbxN6HPPJyVvsC1rsjn7Fy05p8-75cEObSMxBML0PUJcDEZq07Fn/s1600-h/nprof.jpg"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjY2216zPq2IrmUbYvbO6g-YYKWjs8mvU7GQaNBnhOVEx-3_VH18mSMMl01pBbzCDAQ0kx6f2hgyg5esRePlrhMSu9MsbxN6HPPJyVvsC1rsjn7Fy05p8-75cEObSMxBML0PUJcDEZq07Fn/s320/nprof.jpg" alt="" id="BLOGGER_PHOTO_ID_5259185145381942066" border="0" /></a><br /><br />Notice the selected line - the BasicEffect constructor. The total amount of time spent in the BasicEffect.ctor() was almost as much as the total amount of time spent rendering the track!<br /><br />This immediately didn't look right, and having a look at where I was calling new BasicEffect() revealed the problem. I was creating about 5 new BasicEffects per frame<br /><br />The ease of creating a BasicEffect, and even the name itself implies you can create them whenever you need one - but the reality is they are <span style="font-weight: bold;">SLOW </span>to create, so you better not be creating them per frame!<br /><br />I changed my code to create them once then update properties on them per frame.<br />In fact, all but 2 were identical, so I was able to get down to 2 BasicEffect.ctor() calls for the whole lifetime of the game. The framerate is now always 59-60fps, and the annoying pause/jump (which I now assume was the GarbageCollector doing its thing) is gone. And without using nProf I would never have guessed the problem. <br /><br />So the lesson is (as I've been told and forgotten many times) is to profile then optimize, not the other way around.<br /><br />Life is good again :)<br /><br />And heres the latest screenshot, showing the corrected gamma and track barriers:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKJdUBNTN8z14qFUymilS-K1iolN6DJ283xP1D-o13k9ReveNFGW0JtONaYJZ1DwceqkWj9pbkp4-0sbAy2uHq4po7AJm84K-nM6CfFYO4GARgDifARbwH0S6WD7K2bTVjdMyxazhpPc0B/s1600-h/Image4.jpg"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKJdUBNTN8z14qFUymilS-K1iolN6DJ283xP1D-o13k9ReveNFGW0JtONaYJZ1DwceqkWj9pbkp4-0sbAy2uHq4po7AJm84K-nM6CfFYO4GARgDifARbwH0S6WD7K2bTVjdMyxazhpPc0B/s320/Image4.jpg" alt="" id="BLOGGER_PHOTO_ID_5259189720025692898" border="0" /></a>Jeffhttp://www.blogger.com/profile/03124500762526773156noreply@blogger.com3tag:blogger.com,1999:blog-2235478771922609560.post-89854018178173055182008-10-06T11:41:00.000-07:002008-10-06T11:47:26.218-07:00ScreenshotsFor the one person reading this - here are some early screenshots!<br /><br />The starting line<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjox4kr7iMHVIMdyuIgxlzCsySPoKxT0Ucyb5ZyCNuDLCC6tmTx9JDfM21ZgnxPh5OnlU-5s3yIO47EtUlfGgSjA8iqWyColiMgDziq4D5j7jU4ORhBeKUvEcrbqBP8XmBIgdClbJzJ1KVr/s1600-h/Image7.jpg"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjox4kr7iMHVIMdyuIgxlzCsySPoKxT0Ucyb5ZyCNuDLCC6tmTx9JDfM21ZgnxPh5OnlU-5s3yIO47EtUlfGgSjA8iqWyColiMgDziq4D5j7jU4ORhBeKUvEcrbqBP8XmBIgdClbJzJ1KVr/s320/Image7.jpg" alt="" id="BLOGGER_PHOTO_ID_5254113235020904738" border="0" /></a><br /><br />There are still gamma issues with some scenery objects...<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg409wCILFkulCUrI2aNbGqACy9_sAH6E5j4xwAUHsDjoS0G1cqltfB4aR13KLWUASzD6dKmGknOs5YPgyV_QR70dBXWS3bF151QAjlEbwYWAg0oMeFvyeY6U7rtvKQLnX4OAhRl3rkEfnm/s1600-h/Image9.jpg"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg409wCILFkulCUrI2aNbGqACy9_sAH6E5j4xwAUHsDjoS0G1cqltfB4aR13KLWUASzD6dKmGknOs5YPgyV_QR70dBXWS3bF151QAjlEbwYWAg0oMeFvyeY6U7rtvKQLnX4OAhRl3rkEfnm/s320/Image9.jpg" alt="" id="BLOGGER_PHOTO_ID_5254113346408003890" border="0" /></a><br /><br /><br />Birds eye view of part of the track<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHSTC9fk1wGQYkiIE3SGHxJVjaPkikG6G-Yjd9gF4S1-IMqINty8MiY5GuOXHqBW0D3OE_nCA4EjxW-SjhFncjaXrChb5dkV6UdfRkwsCyKaVxi9-kt_NsVqWrcNjfmC_7vfzP4ajB8c-_/s1600-h/Image10.jpg"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHSTC9fk1wGQYkiIE3SGHxJVjaPkikG6G-Yjd9gF4S1-IMqINty8MiY5GuOXHqBW0D3OE_nCA4EjxW-SjhFncjaXrChb5dkV6UdfRkwsCyKaVxi9-kt_NsVqWrcNjfmC_7vfzP4ajB8c-_/s320/Image10.jpg" alt="" id="BLOGGER_PHOTO_ID_5254113424956822994" border="0" /></a><br /><br /><br />The physical road the car actually moves along<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIdGDs6yKI_SO3Z8IGQekUuOnml8rCFeeNvCQN_wlPuPCEtdPGjAg9ngWrI4nUHzfDOxnU4H-sjGXI5BFX3w_EsyvP5McmNrRELDE-673J5-uHDphvJONIxHDQtN9CUMPROAjqFbFlfng7/s1600-h/Image11.jpg"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIdGDs6yKI_SO3Z8IGQekUuOnml8rCFeeNvCQN_wlPuPCEtdPGjAg9ngWrI4nUHzfDOxnU4H-sjGXI5BFX3w_EsyvP5McmNrRELDE-673J5-uHDphvJONIxHDQtN9CUMPROAjqFbFlfng7/s320/Image11.jpg" alt="" id="BLOGGER_PHOTO_ID_5254113495411576898" border="0" /></a>Jeffhttp://www.blogger.com/profile/03124500762526773156noreply@blogger.com3tag:blogger.com,1999:blog-2235478771922609560.post-13096151639479033832008-10-05T21:09:00.000-07:002008-10-05T21:28:06.122-07:00Need For Speed in XNAAs the title suggests, I'm working on an XNA-powered Need for Speed game.<br /><br />It reads in the original Need for Speed 1 data files (using specs found <a href="http://auroux.free.fr/nfs/nfsspecs.txt">here</a>) and renders it out in full XNA goodness - 1024x768, anti-aliasing, motion blur etc.<br /><br />I thought it would be an interesting test - would an amateur using XNA be able to replicate a 10 year old game, which for its time was pretty groundbreaking?)<br /><br />The jury's still out on that one, but so far I have a complete track and vehicle renderer, complete with animating scenery and skybox.<br /><br />I am currently working on the car physics, using <a href="http://hamboeck.blogspot.com/2008/03/marco-monsters-car-physics-demo-in-xna.html">this</a> as a starting point.<br /><br />Screenshots of the original game are a bit hard to find, heres one:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://img266.imageshack.us/img266/350/nfs1rt0.jpg"><img style="cursor: pointer; width: 320px;" src="http://img266.imageshack.us/img266/350/nfs1rt0.jpg" alt="" border="0" /></a>Jeffhttp://www.blogger.com/profile/03124500762526773156noreply@blogger.com2tag:blogger.com,1999:blog-2235478771922609560.post-90971042758950588262007-09-17T13:14:00.000-07:002007-09-17T14:30:46.239-07:00Platform Jumper ScreenshotsPlatform Jumper is a fun little game I've been working on for the last week. The aim is to jump around the blocks with an FPS view and pick up all the coins. There are some special blocks, like Bouncers and Elevators.<br /><br />I've been working on it for about a week and a half to learn XNA. I have previously used DirectX and C++ so most of the concepts are familiar.<br /><br />I'm finding XNA is a really nice library to code against compared to DirectX. Things like Mouse.GetState() and Keyboard.GetState() just make sense. Its many, many more lines of code with DirectX to get the same result.<br /><br />Heres a couple of screenshots<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE8BtWl5vpDufdK176cjUJapx_r_xUDpdNz3G89AhYsjZWRc7smmI80Pb4L6BY-imEQbwgtIYg9Nempt_VTBeFW_OCvmUvgH4lc90PoPQJq9GwpTyljpWMY1zhHIgZOfXLjZJCahV1XG7B/s1600-h/PlatformJumper2.jpg"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE8BtWl5vpDufdK176cjUJapx_r_xUDpdNz3G89AhYsjZWRc7smmI80Pb4L6BY-imEQbwgtIYg9Nempt_VTBeFW_OCvmUvgH4lc90PoPQJq9GwpTyljpWMY1zhHIgZOfXLjZJCahV1XG7B/s400/PlatformJumper2.jpg" alt="" id="BLOGGER_PHOTO_ID_5111270665115748258" border="0" /></a><br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEbZe1yX5fGwzvV_aJrqKsmKkS0sN37Zvrfi24pilXew6HYMk8mEhJWDDADjIGtLHhyphenhyphenRnRWS3iojBzebbg0OilknziHN4grHqzXUXvKBUxKdExhmj63ng42r-_AYs97m4m22CgfZK8sJil/s1600-h/PlatformJumper1.jpg"><img style="cursor: pointer;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEbZe1yX5fGwzvV_aJrqKsmKkS0sN37Zvrfi24pilXew6HYMk8mEhJWDDADjIGtLHhyphenhyphenRnRWS3iojBzebbg0OilknziHN4grHqzXUXvKBUxKdExhmj63ng42r-_AYs97m4m22CgfZK8sJil/s400/PlatformJumper1.jpg" alt="" id="BLOGGER_PHOTO_ID_5111270252798887826" border="0" /></a><br /><br /><a href="http://www.sturm.net.nz/downloads/platformjumper.zip">Download the demo (Version 1)</a><br /><br />The demo features a randomly generated map with 10 coins to pick up.<br /><br />Controls:<br />Jump: Right-mouse or 'A' button<br />Move around: WASD or left thumbstick<br />Look around: Mouse or right thumbstickJeffhttp://www.blogger.com/profile/03124500762526773156noreply@blogger.com0