{
	"version": "https://jsonfeed.org/version/1.1",
	"title": "Karn Bianco - Projects",
	"language": "en",
	"home_page_url": "https://karnbianco.co.uk/",
	"feed_url": "https://karnbianco.co.uk/feed/projects.json",
	"description": "Jack of various trades",
	"author": {
		"name": "Karn Bianco",
		"url": "https://karnbianco.co.uk/about/"
	},
	"items": [
		{
			"id": "https://karnbianco.co.uk/projects/no-games-for-genocide/",
			"url": "https://karnbianco.co.uk/projects/no-games-for-genocide/",
			"title": "No Games For Genocide",
			"content_html": "<h2 id=\"about-the-project\" tabindex=\"-1\">About the Project <a class=\"header-anchor\" href=\"https://karnbianco.co.uk/projects/no-games-for-genocide/\">#</a></h2>\n<blockquote>\n<p><a href=\"https://nogamesforgenocide.com/\">No Games for Genocide</a> is a group of game workers, activists, union organisers, and journalists who care about the games industry, Palestine, and all people living under the violence of colonialism and imperialism.</p>\n<p>We want to expose and work to end the material and commercial ties between the games industry and the military industrial complex, with a particular focus on Israel’s ongoing genocide of Palestinians in the Gaza Strip.</p>\n</blockquote>\n<h2 id=\"development-process\" tabindex=\"-1\">Development Process <a class=\"header-anchor\" href=\"https://karnbianco.co.uk/projects/no-games-for-genocide/\">#</a></h2>\n<p>The initial &quot;minimum viable product&quot; requirements for the <a href=\"https://nogamesforgenocide.com/\">No Games for Genocide</a> campaign website were a simple, static site with an embedded pledge form connected to an <a href=\"https://airtable.com/\">Airtable</a> backend. I collaborated with another designer-developer who created the full UI design in <a href=\"https://www.figma.com/\">Figma</a> while I developed an initial implementation using <a href=\"https://gohugo.io/\">Hugo</a>.</p>\n<p>With this baseline in place, my designer-developer colleague replaced the embedded form with a fully custom, styled and integrated <a href=\"https://nogamesforgenocide.com/take-action/pledge/\">pledge form</a> complete with robust frontend and backend (via <a href=\"https://www.netlify.com/platform/core/functions/\">Netlify serverless functions</a>) input validation.</p>\n<p>A <a href=\"https://docs.netlify.com/build/functions/scheduled-functions/\">scheduled function</a> is configured to periodically update the static site with the latest (manually vetted) pledge data by querying the Airtable API and generating an automatic Git commit which, upon push, automatically triggers a new Hugo build.</p>\n<p><strong>Tools, Services and Tech Used</strong></p>\n<ul>\n<li><strong>UI/UX Design</strong> - Figma</li>\n<li><strong>Frontend</strong> - HTML, CSS, JavaScript, Hugo, Go templates</li>\n<li><strong>Backend</strong> - Netlify, Airtable, Git</li>\n</ul>\n",
			"date_published": "2025-12-02T00:00:00Z
      "summary": "Campaign calling for an end to the game industry&#39;s complicity in genocide as part of the wider BDS movement."
		}
		,
		{
			"id": "https://karnbianco.co.uk/projects/deal-community-platform/",
			"url": "https://karnbianco.co.uk/projects/deal-community-platform/",
			"title": "DEAL Community Platform",
			"content_html": "<p>As the Digital Platform Lead at Doughnut Economics Action Lab (DEAL) - an organisation dedicated to fostering post-capitalist economies that are regenerative and distributive by design - I'm responsible for designing, building, and managing the <a href=\"https://doughnuteconomics.org\">DEAL Community Platform</a>.</p>\n<ul>\n<li><strong>UI/UX Design</strong> - Figma design system</li>\n<li><strong>Frontend Development</strong> - HTML, CSS, SASS, JavaScript</li>\n<li><strong>Backend Development</strong> - Ruby on Rails</li>\n<li><strong>Product Owner</strong> - planning, overall design, strategy</li>\n</ul>\n",
			"date_published": "2022-07-01T00:00:00Z
      "summary": "Community platform to support people putting the ideas of Doughnut Economics into practice."
		}
		,
		{
			"id": "https://karnbianco.co.uk/projects/lost-words/",
			"url": "https://karnbianco.co.uk/projects/lost-words/",
			"title": "Lost Words: Beyond the Page",
			"content_html": "<p><a href=\"https://lostwordsgame.com/\"><em>Lost Words: Beyond the Page</em></a> is a narrative platformer set in the pages of a young girl’s diary, featuring a story written by Rhianna Pratchett. I worked on many areas of the game, including general gameplay, player controls, scripting systems, localization, and more!</p>\n<iframe width=\"560\" height=\"315\" src=\"https://www.youtube-nocookie.com/embed/_GBKVyY4Mqo?si=RynBH0ftuAHD3sCN\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen=\"\"></iframe>\n",
			"date_published": "2020-04-05T00:00:00Z
      "summary": "A narrative platformer set in the pages of a young girl’s diary."
		}
		,
		{
			"id": "https://karnbianco.co.uk/projects/eco/",
			"url": "https://karnbianco.co.uk/projects/eco/",
			"title": "Eco",
			"content_html": "<p><em><a href=\"https://www.strangeloopgames.com/eco/\">Eco</a></em> is an online game where players must collaborate to build a civilization in a world where everything they do affects the environment. The game is developed by the Seattle-based Strange Loop Games who I worked with remotely from the UK. My primary responsibility was working on the localization system, as well as some gameplay quality of life improvements.</p>\n<iframe width=\"560\" height=\"315\" src=\"https://www.youtube-nocookie.com/embed/ud_refZuQoA?si=3drPpP3WAw_Bs_Zo\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen=\"\"></iframe>\n",
			"date_published": "2020-03-21T00:00:00Z
      "summary": "An MMO where every action players take impacts the environment."
		}
		,
		{
			"id": "https://karnbianco.co.uk/projects/on-thin-ice/",
			"url": "https://karnbianco.co.uk/projects/on-thin-ice/",
			"title": "On Thin Ice",
			"content_html": "<p><em>On Thin Ice</em> is a short game about the climate crisis, what its impacts might look like, and what we can do to stop the worst of it right now. With the help of a time-travelling polar bear.</p>\n<p>At least, that's the concept for the <em>full</em> game. The version you can play here is a prototype made in a few for the <a href=\"https://itch.io/jam/climate-jam-2018\">2018 Climate Jam</a>. It's more of a blueprint for a full game than it is a complete game in its own right.</p>\n<p>It was the <a href=\"https://itch.io/jam/climate-jam-2018/results\">best ranked</a> entry - across Educational value, Scientific Accuracy and Gameplay/Fun - in the jam and received some very <a href=\"https://itch.io/jam/climate-jam-2018/rate/284315\">positive comments</a> from the judges!</p>\n<iframe width=\"560\" height=\"315\" src=\"https://www.youtube-nocookie.com/embed/HbuFNc5IBPE?si=b5W1Fl-b5zHc5rKj\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen=\"\"></iframe>\n<blockquote>\n<p>Love the presentation and polish. It's also nice to see the science embedded in the game mechanics rather than tacked on between levels.</p>\n</blockquote>\n<blockquote>\n<p>I LOVED this game! Such a simple but effective concept.  The mechanics of the game and the narrative sit so nicely together - it really was a joy to play and I agree....I see a full game in Nanuq's future!</p>\n</blockquote>\n<p>I hope to revisit the project in the future and flesh it further by including, for example, mini-games that show what we as humans can and should be doing to limit the worst impacts of the climate crisis. Until then, enjoy!</p>\n<p><em>On Thin Ice</em> is available to play for free on Windows, Mac and Linux or in your browser via <a href=\"https://karnbianco.itch.io/on-thin-ice\">itch.io!</a></p>\n<center><iframe src=\"https://itch.io/embed/284315\" width=\"552\" height=\"167\" frameborder=\"0\" class=\"aspect-ratio-auto\"></iframe></center>\n",
			"date_published": "2018-07-30T00:00:00Z
      "summary": "A short game about the climate crisis, developed as part of the 2018 Climate Jam."
		}
		,
		{
			"id": "https://karnbianco.co.uk/projects/plantasia/",
			"url": "https://karnbianco.co.uk/projects/plantasia/",
			"title": "Plantasia",
			"content_html": "<p><em>Plantasia</em> is a small game about cultivating your very own plant-covered island paradise! Take a small, barren island floating in space and fill it with wondrous flora! Explore the universe to discover new species and help them grow. But most importantly of all, be sure to sit back, relax, and enjoy this  time with your new plant friends. &lt;3</p>\n<iframe width=\"560\" height=\"315\" src=\"https://www.youtube-nocookie.com/embed/KXiouHzsOdo?si=M_wmKQFTe_a1r-xi\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen=\"\"></iframe>\n<p>Available to play for free on Windows, Mac and Linux via <a href=\"https://karnbianco.itch.io/plantasia\">itch.io</a>.</p>\n<center><iframe src=\"https://itch.io/embed/224160\" width=\"552\" height=\"167\" frameborder=\"0\" class=\"aspect-ratio-auto\"></iframe></center>\n<p>In addition to the game itself, I’m also making the full collection of source code and assets I created for the project available for free as well. These are all licensed under the <a href=\"https://creativecommons.org/share-your-work/public-domain/cc0/\">Creative Commons CC0 license</a>, which means they’re dedicated to the public domain and can be used for any purpose you like, even commercial.</p>\n<p><a href=\"https://github.com/Spydarlee/Plantasia\">Check out GitHub for the full repository!</a></p>\n",
			"date_published": "2018-05-21T00:00:00Z
      "summary": "A small game about cultivating your very own plant-covered island paradise!"
		}
		,
		{
			"id": "https://karnbianco.co.uk/projects/yooka-laylee/",
			"url": "https://karnbianco.co.uk/projects/yooka-laylee/",
			"title": "Yooka-Laylee",
			"content_html": "<p>I joined the Playtonic team pretty early on and helped transform the original <em>Yooka-Laylee</em> Kickstarter demo into a fully-fledged 3D platformer. I worked on: player physics and handling, cameras, enemy AI and the combat system, the minecart mini-game, performance optimisation, a visual scripting system, cross-platform development, and loads of other stuff.</p>\n<iframe width=\"560\" height=\"315\" src=\"https://www.youtube-nocookie.com/embed/e1gxLvbX3Ow?si=tsIY2U8gzlZL3-G5\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen=\"\"></iframe>",
			"date_published": "2016-06-06T00:00:00Z
      "summary": "A new &quot;buddy duo&quot; 3D platformer from many of the developers that worked on Banjo-Kazooie."
		}
		,
		{
			"id": "https://karnbianco.co.uk/projects/rare-replay/",
			"url": "https://karnbianco.co.uk/projects/rare-replay/",
			"title": "Rare Replay",
			"content_html": "<p>Press A! Hooray! It’s time for <em>Rare Replay</em>!</p>\n<p>What a special project this was to work on. I’ve been a fan of Rare’s games for as long as I can remember. <em>Diddy Kong Racing</em> was the first game I ever owned as a kid (I’d only really played my parents’ games and rentals up until then) and unwrapping <em>Banjo-Kazooie</em> on Christmas morning (1998) and then immersing myself in it for the remainder of the day is still a vividly clear memory.</p>\n<p>So you can imagine my excitement at having the opportunity to revisit 30+ years of the studio’s history in order to lovingly package them together for fans across the globe. And this was no cheap cash-in with a few roms stuffed on a disc, oh no! Each game was lovingly treated: there’s behind the scenes documentaries, never-before-heard music, and loads more.</p>\n<iframe width=\"560\" height=\"315\" src=\"https://www.youtube-nocookie.com/embed/iYbU1uKPaGU?si=oLAvd-TJsQ_xLH3L\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen=\"\"></iframe>\n### So what did I do during development?\n<p>First and foremost it was my job to provide a mechanism for two key features: snapshots and achievements. Snapshots are bite-size challenges that encapsulate a nugget of gameplay from a game and present it in an accessible (but not always easy!) way. So you might be asked, for example, to kill 20 enemies in <em>Jetpac</em> without dying. Each snapshot has an online leaderboard to encourage replayability and a bit of friendly competition.</p>\n<p>But to achieve any of this we needed to know when an enemy is killed and when the player dies. In a game built from source that’s trivial enough, but in a game from 1983 that was written in hand-rolled assembly code? Not so simple. Especially given that a lot of the original source (and any helpful comments and documentation) for these games has long since been lost to the ages. A problem that’s <a href=\"http://www.polygon.com/2015/1/27/7921837/grim-fandango-remastered-interview-double-fine-disney-lucasfilm-sony\">not so uncommon in the industry</a>.</p>\n<p>That’s where I came in. It was my job to dig through binaries and assembly code in an attempt to reverse engineer each game to a point where we could hook onto specific gameplay events. This also meant becoming at least somewhat familiar with an array of processors and assembly languages to cover all our platforms: Spectrum (Z80), NES (6502), Arcade (TMS320), and Nintendo 64 (MIPS). I could write an entire article on the process of doing that for each platform, but needless to say it was a heck of a learning experience. And way more fun than it might sound.</p>\n<p><img class=\"markdown-image\" decoding=\"async\" alt=\"Turbo Tunnel Infinite screenshot from Rare Replay\" title=\"Battletoads infamous Turbo Tunnel level – now infinitely repeating!\" src=\"https://karnbianco.co.uk/img/ceYhn4aj31-720.jpeg\" width=\"720\" height=\"405\">]\nIt’s all well and good having these hooks, but assembly code isn’t very accessible for designers. Early on, then, I went away and had a think and decided to create a simple scripting system that would allow a designer to take all these magic memory addresses and build snapshots around them. I settled on integrating Lua into our engine and wrote some mechanisms that would send callbacks from each of our various emulators when a certain line of code was hit, or a given memory address was written to (e.g. the player’s lives was reduced). Designers could then write a script to chain these together and create a variety of interesting challenges with various goals and criteria.</p>\n<p>For the most part we didn’t alter the original games very much because we wanted to provide a faithful recreation of each experience as best as possible, but there were a few exceptions. There’s a <em>Jetpac</em> snapshot, for example, with no platforms (every level in the original Spectrum game had the same three platforms in the same location), but by far the largest alteration I made was in an effort to celebrate perhaps the most infamous level of any Rare game: <em>Battletoads’</em> Turbo Tunnel. Notoriously difficult (even though the rest of the game is much harder) there was only ever one possible modification to pursue: make it loop infinitely. Sorry/not sorry.</p>\n<p>I also refactored the various Spectrum game menus to make them more sensible for an Xbox One title. There wasn’t much need for an option to choose between keyboard and Kempston Joystick input, for example. The last major alteration, though, was for <em>Jet Force Gemini</em>, which, although an excellent game, features a control/aiming system that is very clearly a product of its time. To modern players the lack of dual analogue stick controls can feel very jarring so that’s exactly what I added. Well. Sort of. It certainly feels more natural at any rate. It’s totally optional, too, so you can revert to the original controls at any time if you prefer. But it’s been very gratifying to see the <a href=\"http://www.rarefandabase.com/jet-force-gemini-will-have-dual-analog-controls/\">overwhelmingly positive response</a> to the new controls.</p>\n<p><img class=\"markdown-image\" decoding=\"async\" alt=\"Jet Force Gemini\" src=\"https://karnbianco.co.uk/img/XLV_hmPHie-720.jpeg\" width=\"720\" height=\"405\">]\nThe <em>Rare Replay</em> team was a pretty small, tight-knit group so there was plenty of other work to go around. I also chipped in with some user interface and general systems work throughout development, but it was the siren call of the reverse engineer that blared loudest. I can’t imagine myself ever getting the chance to work on something like this again, but it was a joy while it lasted.</p>\n",
			"date_published": "2015-07-24T00:00:00Z
      "summary": "A collection of classic Rare games in one shiny package."
		}
		,
		{
			"id": "https://karnbianco.co.uk/projects/sea-of-thieves/",
			"url": "https://karnbianco.co.uk/projects/sea-of-thieves/",
			"title": "Sea of Thieves",
			"content_html": "<p><em>Sea of Thieves</em> is the massively multiplayer, online, open world pirate adventure developed by Rare. I worked with the original prototype team to help turn the initial concept into a playable first iteration, built in Unity (later rebuilt with the Unreal Engine for the final game).</p>\n<iframe width=\"560\" height=\"315\" src=\"https://www.youtube-nocookie.com/embed/pyveR8bKLfA?si=WOqqiDscEpqbgNqF\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen=\"\"></iframe>",
			"date_published": "2015-05-15T00:00:00Z
      "summary": "Prototyping what would become Rare&#39;s open-world, online pirate adventure."
		}
		,
		{
			"id": "https://karnbianco.co.uk/projects/kinect-sports-rivals/",
			"url": "https://karnbianco.co.uk/projects/kinect-sports-rivals/",
			"title": "Kinect Sports Rivals",
			"content_html": "<p><em>Kinect Sports Rivals (KSR)</em> is the latest instalment in the Kinect-powered sporting series, and the first entry for the Xbox One. As well as six sports, it features some truly amazing technology which can digitally scan you into the game in order to create your very own ‘Champion’ which you can take into the various sporting events to serve as your digital avatar.</p>\n<iframe width=\"560\" height=\"315\" src=\"https://www.youtube-nocookie.com/embed/l6Fy70Xz1hw?si=_kVNT2ffgWwMi1aH\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen=\"\"></iframe>\n<p>My role on <em>KSR</em> was UI engineer. That means my life was all screens, buttons, user experience, and so on. The game featured a non-trivial user interface, with a navigable 3D island serving as the main menu. I also, amongst other things, worked on the player management systems and helped integrate Xbox Live multiplayer matchmaking from a frontend perspective.</p>\n",
			"date_published": "2014-04-11T00:00:00Z
      "summary": "Kinect-powered sports game which I worked on as a UI Engineer."
		}
		,
		{
			"id": "https://karnbianco.co.uk/projects/densetsu/",
			"url": "https://karnbianco.co.uk/projects/densetsu/",
			"title": "Densetsu",
			"content_html": "<p><em>Densetsu</em> is a simple game demo built to demonstrate several physics and artificial intelligence techniques as part of a final year University project. The game uses assets from the seminal Super Nintendo game, <em>The Legend of Zelda: A Link to the Past</em>, and challenges players to dash around, sword in hand, collecting rupees, while avoiding (or fighting off) enemy guards.</p>\n<p>The game features custom rigid body physics and a <a href=\"http://en.wikipedia.org/wiki/Separating_axis_theorem\">separating axis theorem (SAT)</a>-based collision to model all physical actions and reactions in the world. Surface friction is modelled alongside air resistance/drag (the latter affecting airborne projectiles such as the boomerang). Different surfaces have different friction coefficients and these can be altered at runtime, such as when the ground become slicker in the rain.</p>\n<iframe width=\"560\" height=\"315\" src=\"https://www.youtube-nocookie.com/embed/sIDiXPt-78Y?si=dgtJ3tJhW2b4CoBV\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen=\"\"></iframe>\n<p>Movement is all calculated using real(-ish) physics, be it linear momentum for player and AI movement or angular momentum in the case of the spinning boomerang. The effect of mass can best be seen in the “black holes” which are incredibly dense and suck in everything around them (well, everything that isn’t nailed down to the ground or it wouldn’t be a very fun game).</p>\n<p>The guard’s artificial intelligence went through two major iterations. In the first, AI agents used the <a href=\"http://aigamedev.com/open/tutorials/theta-star-any-angle-paths/\">Theta* algorithm</a> (an A* variation) for pathfinding alongside simple finite state machines to search out and chase down the player. Once in contact enemies simply charged in at full-speed to attack the player. The video included above is from this first iteration.</p>\n<p>The second version of <em>Densetsu</em> replaced finite state machines with more powerful and versatile behaviour trees. A blackboard system was used to simulate agent-to-agent communication which allowed groups of enemy guards to (or at least <em>appear to</em>) work together to take down the player. This culminated in an <em>Assassin’s Creed</em>-esque combat system in which enemies cluster around the player but only attack (or feint an attack!) one by one.</p>\n<h2 id=\"sources\" tabindex=\"-1\">Sources <a class=\"header-anchor\" href=\"https://karnbianco.co.uk/projects/densetsu/\">#</a></h2>\n<p>– Sprites and images: Sourced directly from <em>The Legend of Zelda: A Link to the Past</em> and from <a href=\"http://zfgc.com/forum/index.php?topic=38894.0\">zfgc.com</a><br>\n– Title Screen Music: <a href=\"http://ocremix.org/remix/OCR01184\">The Legend of Zelda: A Link to the Past ‘Triforce Majeure’ (OC Remix)</a><br>\n– Game Over Music: <a href=\"http://www.youtube.com/watch?v=j96Xgn2G-XQ\">DJ ShaK – Legend of Zelda NES Remix</a><br>\n– Song of Storms remix: <a href=\"http://ocremix.org/remix/OCR02328\">The Legend of Zelda: Ocarina of Time ‘Thunderstruck’ (OC Remix)</a><br>\n– Dark World remix: <a href=\"http://www.youtube.com/watch?v=Xd-jThRvlYI\">The Legend of Zelda: A Link to the Past ‘Dark World Orchestrated’</a><br>\n– Sound effects: <em>The Legend of Zelda: Ocarina of Time</em> and <em>A Link to the Past</em> via <a href=\"http://noproblo.dayjo.org/ZeldaSounds/\">noproblo.dayjo.org</a></p>\n",
			"date_published": "2013-03-12T00:00:00Z
      "summary": "A Zelda-themed demo demonstrating physics and &quot;AI&quot; techniques."
		}
		,
		{
			"id": "https://karnbianco.co.uk/projects/fable-the-journey/",
			"url": "https://karnbianco.co.uk/projects/fable-the-journey/",
			"title": "Fable: The Journey",
			"content_html": "<p><em>Fable: The Journey</em> is an Xbox 360 game and also the fifth instalment in the <em>Fable</em> series developed by <a href=\"http://lionhead.com/\" title=\"Lionhead Studios\">Lionhead Studios</a> and published by Microsoft Studios. It is the first entry in the series to require use of the Kinect sensor.</p>\n<iframe width=\"560\" height=\"315\" src=\"https://www.youtube-nocookie.com/embed/BxdPLiV-Q84?si=ynDLBRRhNdzCtXj3\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen=\"\"></iframe>\n<p><strong>Languages + Tools:</strong> C++, ActionScript, UnrealScript, Xbox 360 SDK/XDK, Scaleform, Unreal Engine 3, Visual Studio, Flash, Unreal Editor.</p>\n<p><strong>User Interface:</strong> During my time on <em>Fable: The Journey</em> I worked to ensure that the game’s Kinect-based user interface (menus, HUD, in-world indicators, etc.) was fully functional and robust. I achieved this with a mix of C++, UnrealScript, and ActionScript engineering solutions.</p>\n",
			"date_published": "2012-10-12T00:00:00Z
      "summary": "The fifth instalment in the Fable series, developed at Lionhead Studios."
		}
		,
		{
			"id": "https://karnbianco.co.uk/projects/just-like-real-life/",
			"url": "https://karnbianco.co.uk/projects/just-like-real-life/",
			"title": "Just Like Real Life",
			"content_html": "<p><em>Just Like Real Life</em> is a unique and <a href=\"http://www.develop-online.net/news/42193/JournoDevSwap-Just-Like-Real-Life-review\">critically acclaimed</a> take on the <a href=\"http://en.wikipedia.org/wiki/Shoot_'em_up\">SHMUP</a> genre. It was developed over the course of 48 hours (5-7th October, 2012) for the JournoDevSwap game jam hosted by <a href=\"http://ukie.info/journodevswap\">Ukie</a>, in which professional games journalists (with the help of student programmers) and games developers swapped places for the day.</p>\n<p>The game’s key twist comes in the form of bouncing bullets. Every shot you fire will bounce off the scenery around you and subsequently pose a threat to your continued survival. The threat is often far greater than that posed by the enemies which also surround you wherever you go. You are, as ever, your own worst enemy. <em>Just Like [in] Real Life</em></p>\n<p>Developing <em>Just Like Real Life</em> was made possible thanks the extremely intuitive <a href=\"http://unity3d.com/\">Unity</a> game engine, as well as regular design input from journalist-turned-designer <a href=\"https://twitter.com/LewieP\">Lewie Procter</a>. Additional selling points include an original, semi-procedural soundtrack by <a href=\"https://twitter.com/Mikey_PB\">Micheal Bowerman</a>, and an online high score table (now defunct 😢) topped off with “infinite” gameplay.</p>\n<iframe width=\"560\" height=\"315\" src=\"https://www.youtube-nocookie.com/embed/BYGG4TTgUP4?si=zrnHyVwbxCbV_sSD\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen=\"\"></iframe>",
			"date_published": "2012-10-07T00:00:00Z
      "summary": "A unique and critically acclaimed take on the SHMUP genre. (Sort of)"
		}
		,
		{
			"id": "https://karnbianco.co.uk/projects/kinect-sports-season-two/",
			"url": "https://karnbianco.co.uk/projects/kinect-sports-season-two/",
			"title": "Kinect Sports: Season Two",
			"content_html": "<p><em>Kinect Sports: Season Two (KS2)</em> is a BAFTA award-winning Kinect game for the Xbox 360 co-developed by <a href=\"http://en.wikipedia.org/wiki/Rare_Ltd.\" title=\"Rare\">Rare</a> and <a href=\"http://www.bigpark.com/\" title=\"BigPark\">BigPark</a>, and published by Microsoft Studios. I worked on the game’s user interface and gameplay systems during my time as a Software Intern at Rare.</p>\n<p><strong>Languages + Tools:</strong> C++, ActionScript, Xbox 360 SDK/XDK, Scaleform, Visual Studio, Flash.</p>\n<p><strong>Frontend + Challenges:</strong> I worked extensively on <em>Kinect Sports: Season Two’s</em> frontend menu systems as well as the interface for the Challenge system which allows players to compete online asynchronously.</p>\n<p><strong>Social DLC:</strong> As part of a <a href=\"http://www.rare.co.uk/news/title-update-for-season-two#mainContentBody\" title=\"title update\">title update</a> for <em>KS2</em> I was responsible for implementing new functionality that allowed players to upload their high scores to Facebook via a new Xbox 360 API. I also created UI that allowed players to share their scores via email.</p>\n<p><strong>Basketball:</strong> The <a href=\"http://www.rare.co.uk/news/kinect-sports-season-two-basketball-challenge-pack\" title=\"Basketball Challenge Pack\">Basketball Challenge Pack</a> downloadable content (DLC) added a new sport to <em>KS2</em> in the form of three new mini-games. I was responsible for the in-game UI (HUD, etc.) for all three, as well as some of the gameplay mechanics in <em>Shot Party</em>.</p>\n",
			"date_published": "2011-10-21T00:00:00Z
      "summary": "BAFTA award-winning Kinect game for the Xbox 360 co-developed by Rare and BigPark"
		}
		,
		{
			"id": "https://karnbianco.co.uk/projects/glee-direct-x-engine/",
			"url": "https://karnbianco.co.uk/projects/glee-direct-x-engine/",
			"title": "GLEE – DirectX Engine",
			"content_html": "<p>GLEE – or graphics/game library and extensible engine – is an “under-development” engine for 3D graphics and game applications written in C++ using the DirectX rendering API. It bears absolutely no resemblance to the television show of the same name. However, if it were sentient, it would probably enjoy show tunes.</p>\n<iframe width=\"560\" height=\"315\" src=\"https://www.youtube-nocookie.com/embed/LRPsJ61I4Og?si=DZdgr7gIfqDu2XsC\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen=\"\"></iframe>\n<h3 id=\"features\" tabindex=\"-1\">Features <a class=\"header-anchor\" href=\"https://karnbianco.co.uk/projects/glee-direct-x-engine/\">#</a></h3>\n<p><strong>Per-Pixel Lighting:</strong> A shader-based implementation of the Phong shading and reflection model for accurate lighting at the pixel level. Currently supports up to 16 directional and point lights (8 of each).</p>\n<p><strong>Multiple Windows/Viewports:</strong> Multiple viewports and render windows can be freely created/adjusted at runtime. Potential applications include level editors and 3D editing software.</p>\n<p><strong>Flexible Cameras:</strong> Fixed, first- and third-person cameras are all supported. The latter can be controlled by either keyboard and mouse or (Xbox 360) gamepad input. Each can be tied to a specific viewport allowing for multiple views of a scene.</p>\n<p><strong>XML Scene Loading:</strong> Each scene is organized as a scene graph containing numerous scene nodes. Each of these can be described in an XML file and loaded in at runtime; therefore reducing compilation time.</p>\n<p><strong>Collision Detection:</strong> Collisions tests between spheres and axis-aligned bounding boxes (AABBs) are supported. An event-based system allows individual nodes/classes to respond to collision events as required.</p>\n<p><strong>Terrain:</strong> Terrain class supports generation using a heightmap, and rendering using multiple textures blended together based on terrain height. Collision with the terrain is supported to allow for objects to move around on its surface.</p>\n<p><strong>L-Systems:</strong> Simple scholastic, bracketed L-Systems allow for “procedurally” generated trees and foliage to decorate scenes. Currently limited to being rendered as collections of line primitives.</p>\n<p><strong>Input:</strong> Raw (unprocessed) keyboard and mouse input fully supported to allow for highly-accurate user input. Microsoft’s XInput library utilized to support input from an Xbox 360 gamepad.</p>\n",
			"date_published": "2011-05-10T00:00:00Z
      "summary": "GLEE, aka the graphics/game library and extensible engine - written in C++."
		}
		,
		{
			"id": "https://karnbianco.co.uk/projects/4k-psp-l-systems/",
			"url": "https://karnbianco.co.uk/projects/4k-psp-l-systems/",
			"title": "4K PSP Demo: L-Systems",
			"content_html": "<p>My L-System demo was written in C for the PlayStation Portable, using an official PSP Devkit. It is designed to simulate moving through a virtual forest environment, with trees growing/shrinking as the user/camera moves through the world. The camera can be manipulated on the fly, allowing users to pause, look around, and admire their surroundings – if they so wish!</p>\n<h3 id=\"l-systems\" tabindex=\"-1\">L-Systems <a class=\"header-anchor\" href=\"https://karnbianco.co.uk/projects/4k-psp-l-systems/\">#</a></h3>\n<p>L-Systems (or Lindenmayer systems) were created by Hungarian biologist Aristid Lindenmayer to describe the development of simple multicellular organisms. They were later developed by Przemysaw Prusinkiewicz and others – to describe more complex, branching structures. They are generated recursively, which leads to fractal-like self-similarity.</p>\n<p>L-Systems are essentially a string of characters which can be represented graphically using a turtle interpretation of the string. Turtle graphics interprets each character/letter within the string as a command for an imaginary turtle with a position and orientation in the world. Commands include move forward and draw, turn left, and so on, which can be combined to create intricately complex systems.</p>\n<figure><img class=\"markdown-image\" decoding=\"async\" alt=\"PSP 4K L-Systems Screenshot 1\" src=\"https://karnbianco.co.uk/img/YaREBiawhW-480.png\" width=\"480\" height=\"272\"></figure>\n<figure><img class=\"markdown-image\" decoding=\"async\" alt=\"PSP 4K L-Systems Screenshot 2\" src=\"https://karnbianco.co.uk/img/BPtr2loZS7-480.png\" width=\"480\" height=\"272\"></figure>\n<h3 id=\"my-demo\" tabindex=\"-1\">My Demo <a class=\"header-anchor\" href=\"https://karnbianco.co.uk/projects/4k-psp-l-systems/\">#</a></h3>\n<p>My L-System demonstration features 6 unique L-Systems. Five of these are scholastic (semi-randomised), bracketed (branching) systems which represent “trees”, while the sixth is a simple DOL-system (deterministic, non-random) which resembles a grid and serves as the floor and ceiling of the virtual world.</p>\n<p>Each scholastic L-System is generated using a selection of randomly-chosen rewriting rules, allowing for variations of the same basic L-system. This reduces the artificial regularity which would otherwise be evident in a scene with multiple copies of the same L-System. Each of these “trees” actually exists in a 2D plane is constantly rotated to face the camera at all times.</p>\n<p>A new colour for the L-System is chosen from an indexed colour table at each branch of a “tree”, highlighting L-System’s ability to accurately represent organic structures. Trees are then rendered gradually – with the number of branches increasing/decreasing every frame to simulate organic growth. Trees constantly move forwards to simulate “walking” through a forest.</p>\n<p>The entire demo utilizes exactly <strong>4 KB</strong> of pre-linkage text (programming instructions) and <strong>1 KB</strong> of static data. Unfortunately I cannot upload the source code in its current form due its use of PSP library code. I am, however, currently working on a cross-platform version of the project which will also run on Windows PCs via DirectX.</p>\n",
			"date_published": "2011-04-06T00:00:00Z
      "summary": "A tiny tech demo for the PlayStation Portable. 🌲"
		}
		,
		{
			"id": "https://karnbianco.co.uk/projects/ray-tracer/",
			"url": "https://karnbianco.co.uk/projects/ray-tracer/",
			"title": "Ray Tracer",
			"content_html": "<p>My simple ray tracer written in C++ demonstrates a recursive ray tracing algorithm for rendering a scene made up of 3D primitives (spheres and planes in this case). This method stands in contrast to traditional rasterization-based approaches which are typically supported by accelerated graphics hardware and used in real-time games. The following scenes were both rendered in under a second:</p>\n<p>Ray tracing works by firing a series of rays – representing light rays, albeit in reverse – from a given viewpoint through an image plane in a 3D scene. When one of these rays hits an object in the scene, the colour of the object at that point is used as the colour of the image plane pixel the ray passed through on its journey. This colour is typically determined using the <a href=\"http://en.wikipedia.org/wiki/Phong_shading\">Phong shading model</a>, which combines ambient, diffuse and specular lighting components.</p>\n<figure><img class=\"markdown-image\" decoding=\"async\" alt=\"Rear Plane Shadows)\" src=\"https://karnbianco.co.uk/img/ALQIjbS2zC-720.jpeg\" width=\"720\" height=\"453\"><figcaption>Rear Plane Shadows</figcaption></figure>\n<p>More advanced effects such as reflection and refraction can be simulated by recursively tracing additional rays, originating at the point of the previous intersection, and checking those rays for collisions with other objects. The number of these sequential “bounces” is usually limited to some fixed number in order to avoid an infinite loop (not to mention that it becomes difficult to see any noticeable impact on visual quality after a given recursive depth).</p>\n<p>In the interest of science I am attaching a series of screenshots I captured during development. Each highlights a particularly interesting failed attempt at implementing a particular feature. Hover over each image for a brief description of what’s going on, or click for a larger version.</p>\n<p></p><div>            <div class=\"gallery\" id=\"gallery-ray-tracer\">                <div class=\"gallery-sizer\"></div>                          <a href=\"https://karnbianco.co.uk/img/2Lh6d5RBj2-778.jpeg\" class=\"gallery-item\" data-pswp-width=\"778\" data-pswp-height=\"490\" data-longitude=\"null\" data-latitude=\"null\" data-thumbnail=\"/img/2Lh6d5RBj2-350.jpeg\" target=\"_blank\">            <img src=\"https://karnbianco.co.uk/img/2Lh6d5RBj2-350.jpeg\" alt=\"undefined\">        </a>            <a href=\"https://karnbianco.co.uk/img/m8LTv7ovrO-778.jpeg\" class=\"gallery-item\" data-pswp-width=\"778\" data-pswp-height=\"490\" data-longitude=\"null\" data-latitude=\"null\" data-thumbnail=\"/img/m8LTv7ovrO-350.jpeg\" target=\"_blank\">            <img src=\"https://karnbianco.co.uk/img/m8LTv7ovrO-350.jpeg\" alt=\"undefined\">        </a>            <a href=\"https://karnbianco.co.uk/img/J_u7oef-MG-778.jpeg\" class=\"gallery-item\" data-pswp-width=\"778\" data-pswp-height=\"490\" data-longitude=\"null\" data-latitude=\"null\" data-thumbnail=\"/img/J_u7oef-MG-350.jpeg\" target=\"_blank\">            <img src=\"https://karnbianco.co.uk/img/J_u7oef-MG-350.jpeg\" alt=\"undefined\">        </a>            <a href=\"https://karnbianco.co.uk/img/OfaT-bmycH-778.jpeg\" class=\"gallery-item\" data-pswp-width=\"778\" data-pswp-height=\"490\" data-longitude=\"null\" data-latitude=\"null\" data-thumbnail=\"/img/OfaT-bmycH-350.jpeg\" target=\"_blank\">            <img src=\"https://karnbianco.co.uk/img/OfaT-bmycH-350.jpeg\" alt=\"undefined\">        </a>            <a href=\"https://karnbianco.co.uk/img/gv6QbMDwsI-778.jpeg\" class=\"gallery-item\" data-pswp-width=\"778\" data-pswp-height=\"490\" data-longitude=\"null\" data-latitude=\"null\" data-thumbnail=\"/img/gv6QbMDwsI-350.jpeg\" target=\"_blank\">            <img src=\"https://karnbianco.co.uk/img/gv6QbMDwsI-350.jpeg\" alt=\"undefined\">        </a>            <a href=\"https://karnbianco.co.uk/img/Ryv72Vwkq6-778.jpeg\" class=\"gallery-item\" data-pswp-width=\"778\" data-pswp-height=\"490\" data-longitude=\"null\" data-latitude=\"null\" data-thumbnail=\"/img/Ryv72Vwkq6-350.jpeg\" target=\"_blank\">            <img src=\"https://karnbianco.co.uk/img/Ryv72Vwkq6-350.jpeg\" alt=\"undefined\">        </a>            <a href=\"https://karnbianco.co.uk/img/Nu28uM_-Js-778.jpeg\" class=\"gallery-item\" data-pswp-width=\"778\" data-pswp-height=\"490\" data-longitude=\"null\" data-latitude=\"null\" data-thumbnail=\"/img/Nu28uM_-Js-350.jpeg\" target=\"_blank\">            <img src=\"https://karnbianco.co.uk/img/Nu28uM_-Js-350.jpeg\" alt=\"undefined\">        </a>            <a href=\"https://karnbianco.co.uk/img/7TFGPuv7Tu-778.jpeg\" class=\"gallery-item\" data-pswp-width=\"778\" data-pswp-height=\"490\" data-longitude=\"null\" data-latitude=\"null\" data-thumbnail=\"/img/7TFGPuv7Tu-350.jpeg\" target=\"_blank\">            <img src=\"https://karnbianco.co.uk/img/7TFGPuv7Tu-350.jpeg\" alt=\"undefined\">        </a>                </div>            <script type=\"module\">                import PhotoSwipeLightbox from '/js/photoswipe-lightbox.esm.min.js';                import PhotoSwipe from '/js/photoswipe.esm.min.js';                const lightbox = new PhotoSwipeLightbox({                    gallery: '#gallery-ray-tracer',                    children: 'a',                    pswpModule: PhotoSwipe,                    preload: [1, 1]                }).init();            </script>        </div><p></p>\n<p>My ray tracer currently supports sphere and plane primitives, point lights, Phong shading (diffuse and specular lighting), reflections, and shadows. Eventually I hope to implement extra primitives (triangles and cubes), other light sources (directional and spot), refractions, and spatial partitioning for rendering large scenes.</p>\n",
			"date_published": "2011-02-01T00:00:00Z
      "summary": "Ray tracer written in C++ showcasing a recursive ray tracing algorithm."
		}
		,
		{
			"id": "https://karnbianco.co.uk/projects/3d-software-renderer/",
			"url": "https://karnbianco.co.uk/projects/3d-software-renderer/",
			"title": "3D Software Renderer",
			"content_html": "<p>My 3D software renderer was written in C++ and is capable of displaying 3D models loaded from id Software’s <a href=\"http://en.wikipedia.org/wiki/MD2_%28file_format%29\">.md2 format</a>. It utilizes the GDI+ graphics library to set pixels on the screen, but is otherwise entirely custom code.</p>\n<iframe width=\"560\" height=\"315\" src=\"https://www.youtube-nocookie.com/embed/HAuabF-zVkQ?si=X0MTsGARw9y4R5_s\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen=\"\"></iframe>\n<h3 id=\"key-features\" tabindex=\"-1\">Key Features <a class=\"header-anchor\" href=\"https://karnbianco.co.uk/projects/3d-software-renderer/\">#</a></h3>\n<p><strong>3D Transformations</strong> Models loaded from.md2 files can be translated, rotated and scaled in 3D space. The camera can also be translated and rotated in real-time.</p>\n<p><strong>Back-face Culling</strong> Only visible polygon’s are rendered. Visibility is determined by checking the dot product of a polygon’s surface normal with the vector from the camera to that polygon for negativity.</p>\n<p><strong>Depth Sorting</strong> A basic implementation of the <a href=\"http://en.wikipedia.org/wiki/Painter's_algorithm\">Painter’s algorithm</a> ensures that those polygons furthest from the camera are rendered first, while those nearest are drawn last and on top of everything else.</p>\n<p><strong>Custom Flat Shading</strong> The FillPolygon() routine provided by GDI+ has been replaced by a custom routine that allows each pixel on the screen to be set separately using GDI+’s SetPixel().</p>\n<p><strong>Gouraud Shading</strong> Shading/lighting is computed by interpolating between vertices with Gouraud shading. This is less accurate and less computationally-intensive than per-pixel lighting (as in Phong shading) but far more aesthetically appealing than flat shading.</p>\n<p><strong>Lighting</strong> Multiple ambient, directional and point lights are all implemented with diffuse reflection. Spot lights and specular reflection were partially implemented (but not demoed).</p>\n<p><strong>Texturing</strong> MD2 models that include a corresponding texture file in the .pcx format can be rendered to the screen with that texture, along with the effects of any applied lighting.</p>\n",
			"date_published": "2010-12-26T00:00:00Z
      "summary": "Simple software renderer written in C++."
		}
		,
		{
			"id": "https://karnbianco.co.uk/projects/escape-from-alcatraz/",
			"url": "https://karnbianco.co.uk/projects/escape-from-alcatraz/",
			"title": "Escape From Alcatraz",
			"content_html": "<p><em>Escape from Alcatraz</em> is a point and click adventure game inspired by LucasArts graphic adventure games from the 1990s, such as <em>The Curse of Monkey Island</em> and <em>Grim Fandango</em>. It was developed using the Unreal Development Kit (UDK) over the course of several weeks.</p>\n<p>Mechanics-wise, <em>Escape from Alcatraz</em> is a complete game. In terms of content it features around ten-fifteen minutes of gameplay, assuming the player knows exactly what to do, as shown in the video walkthrough above. The aim of the game/demo is to collect items needed to make a fake head, which the main character can then use to placate the guards while he escapes during the night.</p>\n<iframe width=\"560\" height=\"315\" src=\"https://www.youtube-nocookie.com/embed/tNksUqPSYkM?si=tCuVFjzwePulTE5n\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen=\"\"></iframe>\n### Unique Selling Points\n<p><strong>Point-and-click Interface</strong> Movement, interactions, conversations, inventory navigation, and so on, are all handled exclusively using the mouse. There is no keyboard/gamepad input at all.</p>\n<p><strong>Navigation Mesh Pathfinding</strong> The Unreal Engine’s support for auto-generation of Navigation Meshes, which simplifies the representation of complex geometry, is utilized for pathfinding instead of traditional path nodes.</p>\n<p><strong>Conversations</strong> A linear, rather than fully branching, conversation system is included which supports multiple dialogue choices and item trading with non-playable characters. It uses <a href=\"http://www.scaleform.com/\">Scaleform</a> and Adobe Flash for its user interface.</p>\n<p><strong>Inventory</strong> The Scaleform-powered inventory supports a drag-and-drop interface for reordering and/or combining items. Items can each be examined individually, and the player can cycle through items without using the inventory UI courtesy of the scroll wheel.</p>\n<p><strong>Interaction System</strong> Most of the objects in Alcatraz can be interacted with in one way or another; almost all can be examined, while many can be used directly, or used in conjunction with the currently equipped inventory item.</p>\n",
			"date_published": "2010-12-15T00:00:00Z
      "summary": "A point and click adventure game demo inspired by the LucasArts graphic adventure games of the 1990s."
		}
		,
		{
			"id": "https://karnbianco.co.uk/projects/mips-music-sequencer/",
			"url": "https://karnbianco.co.uk/projects/mips-music-sequencer/",
			"title": "MIPS Assembly Music Sequencer",
			"content_html": "<p>Using the <a href=\"http://en.wikipedia.org/wiki/MIPS_architecture\">MIPS</a> assembly language I developed a simple music sequencer capable of playing back music stored in a custom binary format. The MIPS architecture is the basis for the PlayStation Portable’s core CPU, but for this project I was using it in a simulated environment. MARS (the MIPS Assembler and Runtime Simulator) is an open-source MIPS IDE released by <a href=\"http://courses.missouristate.edu/KenVollmar/MARS/\">Missouri State University</a> that I was able to use and extend.</p>\n<iframe width=\"560\" height=\"315\" src=\"https://www.youtube-nocookie.com/embed/F7_ipG2mj0M?si=m0UCLDi7I1trysTp\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen=\"\"></iframe>\n<p>The current version (4.0.1) of MARS boasts two system call (Syscall) functions for simulating MIDI playback through Java (which MARS is built in). Unfortunately these are not designed for the kind of intense MIDI usage I needed for the project. As such, I took it upon myself (with assistance from Dominic Bodman) to write two improved Syscalls – one for playing a note, and another for setting a MIDI channel with a given instrument – and make the resulting project available to my classmates.</p>\n<p>The above recording (which features an impromptu appearance from yours truly) would have sounded far worse in the original version of MARS. Notes in a chord would not have played at the same time, becoming arpeggiated, and slowdown would have been a big problem. After I solved these issues I was able to distribute the new version of MARS among my University classmates so that anyone who wished to could make use of it in their assignments.</p>\n<p>As for my actual MIPS assembly program; it works by reading in data extracted from MIDI files (achieved with a custom C# application I wrote as part of my “tool chain”) and saved into a custom (.karn) binary format. My MIPS assembly then reads this data in, dynamically allocating memory on the heap depending on song length. From here it sets up any necessary MIDI channels with the appropriate instrument, and handles playing back notes at the correct intervals.</p>\n<p>High-level languages and third-party game engines are becoming increasingly commonplace in the games industry, but low-level optimisations are still important. As my first foray into assembly programming, this project has been great fun. Working simultaneously on improving MARS in Java and writing my sequencer in MIPS assembly reinforced just how much is being done for us under the hood of higher level languages, and how much we take for granted.</p>\n",
			"date_published": "2010-11-12T00:00:00Z
      "summary": "A simple music sequencer capable of playing back music stored in a custom binary format."
		}
		,
		{
			"id": "https://karnbianco.co.uk/projects/project-maternity/",
			"url": "https://karnbianco.co.uk/projects/project-maternity/",
			"title": "Project Maternity",
			"content_html": "<p><em>Project Maternity</em> was a 2010 Imagine Cup entry from Ninja Vikings with Claws’ (Dominic Bodman, Catarina Barros, Daniel Dexter, and myself). It made it to the second round of the competition – an non-trivial feat for first year students who had only a few weeks of development time..</p>\n<p>The United Nation’s <a href=\"http://www.un.org/millenniumgoals/\">Millennium Goals</a> were the theme of the 2010 Imagine Cup. The MGs aim to reduce poverty around the globe, ensure gender equality, and so on. <em>Project Maternity</em> was based on the 5th Millennium Goal – <a href=\"http://www.un.org/millenniumgoals/maternal.shtml\">improving maternal health</a>.</p>\n<p>The game takes inspiration from <em>Diner Dash</em> in terms of mechanics – as a maternity nurse it’s your job to rush around busy hospital environments helping pregnant mothers from when they arrive right up until they give birth.</p>\n<p>As you progress you can enlist AI-controlled nurses to help perform most tasks, including: greeting patients, taking them to their beds, and cleaning empty beds. The only thing they cannot do is resolve medical complications, which falls to you and you alone.</p>\n<p>My role was lead gameplay and AI programmer. I was primarily responsible for authoring the behavioural system for the artificially intelligent nurses which assist the player. I ensured that each nurse always had a task to do, and never hindered with the player’s progress.</p>\n<p><em>Project Maternity</em> was developed by Dominic Bodman, Catarina Barros, Daniel Dexter, and Karn Bianco using C# and the XNA Framework.</p>\n",
			"date_published": "2010-08-01T00:00:00Z
      "summary": "A 2010 Imagine Cup entry themed around the United Nation&#39;s Millennium Goals."
		}
		,
		{
			"id": "https://karnbianco.co.uk/projects/harmonia/",
			"url": "https://karnbianco.co.uk/projects/harmonia/",
			"title": "Harmonia",
			"content_html": "<p><em>Harmonia</em> was designed to be an asynchronous co-operative game for the Xbox 360 in which an experienced videogame player could support a less experienced player who was at the center of the gameplay experience.</p>\n<p>The novice player’s role is to physically interact with puzzle tiles that make up the world around him or her in order to solve puzzles and earn points, while the experienced player provides assistance.</p>\n<iframe width=\"560\" height=\"315\" src=\"https://www.youtube-nocookie.com/embed/b1B6CZWICZE?si=BjKvWHFbo68Fxxvp\" title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen=\"\"></iframe>\n<p>No simplistic 2D puzzle game with cutesy visuals (provided by <a href=\"http://www.lostgarden.com/\">Lost Garden</a>, by the way) would be complete without an exhaustively extraneous plot, though, so I shan’t disappoint:</p>\n<blockquote>\n<p>Harmonia is a luscious world inhabited by a populace – known as the Harmonians – who live exclusively on floating islands in the sky. These islands are kept afloat by the miraculous properties of an enigmatic mineral known as ‘Harmonium’.</p>\n<p>‘Harmonium’ grows naturally in the ground – which is fortuitous, because the ground would crash into the oceans below without it – but the Harmonians also harvest it for various applications, technological and otherwise, that shan’t be discussed here.</p>\n<p>When a Harmonian comes of age, he or she is assigned a mentor whose job it is to instruct in the ways of ‘Harmonium’ harvesting an ancient, if slightly bizarre and archaic, tradition that is somewhat comparable to tilling soil, only with more ‘flipping’.</p>\n<p>In the name of education, however, the mentor must not personally perform any harvesting. Instead, the mentor can only guide their pupil – helping them navigate the expansive lands of Harmonia, and undoing their inevitable mistakes when necessary.</p>\n</blockquote>\n<p><em>Harmonia</em> was created as a solo project using C# and XNA (with XML used for saving/loading).</p>\n",
			"date_published": "2010-06-11T00:00:00Z
      "summary": "C# prototype for a wee asynchronous co-operative puzzle game."
		}
		
	]
}
