tag:blogger.com,1999:blog-340255962024-03-07T05:48:00.331-03:00Do as I say, not as I do ...Videogame development and what not ...Ultraheadhttp://www.blogger.com/profile/07831144482704209713noreply@blogger.comBlogger464125tag:blogger.com,1999:blog-34025596.post-20464442447721910432014-01-23T04:06:00.000-02:002014-01-23T04:07:45.269-02:00THE CAMPAIGN FOR THE APE IS NOW LIVE!Finally!<br />
<br />
The campaign for the Asset Pipeline Editor is live at <a href="http://igg.me/at/theape">http://igg.me/at/theape</a><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://images.indiegogo.com/file_attachments/239576/files/20131203092508-Cuadro_1.png?1386091508" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://images.indiegogo.com/file_attachments/239576/files/20131203092508-Cuadro_1.png?1386091508" height="241" width="400" /></a></div>
<br />
<br />
Hope you guys find it attractive and decide to contribute either financially and or by helping me spread the word.<br />
<br />
Cheers!<br />~PeteUltraheadhttp://www.blogger.com/profile/07831144482704209713noreply@blogger.com0tag:blogger.com,1999:blog-34025596.post-52381482801095865032013-12-31T05:48:00.002-02:002013-12-31T13:26:35.404-02:00REGARDING THE FUTURE OF C# ...I'll be out of office for a few days and before I go let me post some words about the features I'd like to see implemented in upcoming versions of C# (btw, on my return I'll be posting again about The APE).<br />
<br />
A couple of weeks ago on "<a href="http://channel9.msdn.com/Shows/This+Week+On+Channel+9/TWC9-December-13-2013">This Week On Channel 9</a>" series there was a reference to Mads Torgensen's presentation in London regarding "<a href="http://wesnerm.blogs.com/net_undocumented/2013/12/mads-on-c-60.html">The Future of C#</a>", announcing new features that could probably get implemented in C# 6.0.<br />
<br />
So, in this post, let me explain <a href="http://channel9.msdn.com/Shows/This+Week+On+Channel+9/TWC9-December-13-2013#c635225724398354786">some of the features</a> that I hope they implement in C# in the short/middlle run:<br />
<br />
<h3>
1. LLVM-Like Compiler For Native Code</h3>
<br />
I talked about this many times, but I think it's a perfect time to mention it again.<br />
<br />
So far, if you want to compile MSIL to native code at once, you can use a tool called NGen, which creates a native image of the code for the machine where compilation is being done. The problem with this tool is that its main purpose is to reduce startup times. Meaning? You won't get optimized bits for the whole code; just for the blocks first executed when the program starts.<br />
<br />
Imho, we need more ... in this relatively new world of app marketplaces it'd be really handy to count on a model where you can deliver optimized native bits to the device/console/machine where the app would be downloaded and installed, don't you think?<br />
<br />
Picture it like this: say you create an app/game with C# for the XBox One (using portable assemblies or not) and compile your source code to MSIL. Since the hardware of the console is the same in terms of main components (processor, memory, etc.) then why not compiling the whole MSIL code to native bits optimized for the Xbone console at once? (either on your side or on MSFT servers' one)<br />
<br />
With a LLVM-Like compiler this could be achieved and extended to other platforms. But wait a minute! Isn't it what MSFT is doing for WP8? It sounds like it. But wait a minute, again! Isn't it something like the AOT compilation that can be found in the Mono Framework? If the latter gives optimized bits for whole assemblies per platform then it is!<br />
<br />
In fact, many sources mentioned the so colled "<a href="http://news.softpedia.com/news/Microsoft-Showcases-Project-N-to-Speed-Up-Windows-8-1-Apps-400548.shtml">Project N</a>", which would be used to speed up Windows 8.1 apps. What is more, a few sources also mention that MSFT is working in a common compiler for C++/C#. I hope it also brings a more performing way to do interop stuff with C++.<br />
<br />
True or not, this is a "must have" in order to end the C++/C# perf discussion!<br />
<br />
<h3>
2. "Single Instruction, Multiple Data" (SIMD)</h3>
<br />
In modern HW architecture, <a href="http://en.wikipedia.org/wiki/SIMD">SIMD</a> has become a standard when you want to boost performance in specific operations, in particular, ("vectorized") mathematic ones.<br />
<br />
As a mather of fact, C++ counts with DirectXMath libraries (based on the formerly called XnaMath ones) which do implement SIMD, but unfortunately do not support C#.<br />
<br />
Again, SIMD is already present in the Mono Framework for Math operations, so why not adding it to the .NET Framework once and for all?<br />
<br />
I hope MSFT <a href="https://connect.microsoft.com/VisualStudio/feedback/details/778895/add-builtin-simd-support-for-net">listen to us</a> ...<br />
<br />
<h3>
3. Extension Properties</h3>
<br />
We have extension methods, so this is a corolary of it. Today, you can only implement getters (and setters) like this:<br />
<br />
<b> public static string NameToDisplayGetter (this IPerson person)</b><br />
<b> {</b><br />
<b> ...</b><br />
<b> }</b><br />
<br />
Then, why not having something like this?<br />
<br />
<b> public static string NameToDisplay: IPerson person</b><br />
<b> {</b><br />
<b> get { ... } // You could also add a setter, if needed.</b><br />
<b> }</b><br />
<br />
Of course that the syntax in the example above may vary, so I guess you get the idea here. There are several use cases where a feature like this could come handy, including MVVM or plain INotifyPropertyChanged ones.<br />
<br />
<h3>
4. Generic Enum Contraints</h3>
<br />
Generics is one of my favorite .NET features. There's lot of things that can be achieved through it but it has still room for improvement.<br />
<br />
One of the things to improve are constraints. So far, when dealing with types of software elements, we have only two: class and struct. So, what about enums?<br />
<br />
Currently, if you want to mimic an enum constraint you will have to write something like ...<br />
<br />
<b> public void OperationX<tenum>(TEnum myEnum) </tenum></b><br />
<b>where TEnum: struct, IComparable, IFormattable, IConvertible ... and so on so forth.</b><br />
<div>
<b> {</b></div>
<div>
<b> … usual stuff …</b></div>
<div>
<b> }</b></div>
<br />
... and also, given that you are dealing with a subset of elements that approximate to an enum, you need to check whether and enum has been passed, generally throwing an exception if not:<br />
<br />
<b>if (!typeof(TEnum).IsEnum)</b><br />
<b> {</b><br />
<b> throw new ArgumentException("The passed type is not an enum");</b><br />
<b> }</b><br />
<br />
Why not simplify it to something like this?<br />
<br />
<b> public void OperationX<tenum>(TEnum myEnum)</tenum></b><br />
<b>where TEnum: enum</b><br />
<div>
<b> {</b></div>
<div>
<b> … usual stuff …</b></div>
<div>
<b> }</b></div>
<br />
Not only it makes sense, but also would simplify things a lot as well as open a wide range of handy operations and extension methods.<br />
<br />
<h3>
5. NumericValueType Base Class</h3>
<br />
<div>
.NET's CLR treats structs in a special way, even though they have a base class: ValueType.</div>
<div>
<br /></div>
<div>
I'll not be explaining here the characteristics of built-in primitives and structs; instead, I'll ask the following question: in the current version of C# can we achieve something like this ...?</div>
<div>
<br /></div>
<div>
<b> TNumeric Calculate<tnumeric>(TNumeric number1, TNumeric number2, TNumeric number3)</tnumeric></b></div>
<div>
<b> where TNumeric: struct</b></div>
<div>
<b> {</b></div>
<div>
<b> return number1 + number2 * number3;</b></div>
<div>
<b> }</b></div>
<div>
<br /></div>
<div>
The answer: not without proper casts. So, a life changer for this type of situations would be to add a specification of ValueType that enjoys the benefits of structs and also supports basic math operations without any kind of wizardry: NumericValueType.</div>
<div>
<br /></div>
<div>
With that class and a new reserved word like, say, "numeric", "number" or "primitive", we could write generic operations and extension methods with a syntax as simplier as:</div>
<div>
<br /></div>
<div>
<div>
<b> TNumeric Calculate<tnumeric>(TNumeric number1, TNumeric number2, TNumeric number3)</tnumeric></b></div>
<div>
<b> where TNumeric: numeric</b></div>
<div>
<b> {</b></div>
<div>
<b> return number1 + number2 * number3;</b></div>
<div>
<b> }</b></div>
</div>
<div>
<br /></div>
<div>
How about declaring new type of numbers? Easy ...</div>
<div>
<br /></div>
<div>
<b> public numeric Percentage</b></div>
<div>
<b> {</b></div>
<div>
<b> … usual stuff …</b></div>
<div>
<b> }</b></div>
<br />
... or ...<br />
<br />
<div>
<b> public numeric Half</b></div>
<div>
<b> {</b></div>
<div>
<b> … usual stuff …</b></div>
<div>
<b> }</b></div>
<div>
<br /></div>
<div>
No need to specify "struct" since "numeric" would be a value type that supports basic math operations (that we would need to implement when we declare the type, maybe, by overriding some base operations), and so in common scenarios there would be no need to cast values to do math.</div>
<div>
<br /></div>
<h3>
6. Declaration of Static Operations On Interfaces</h3>
<br />
Put simply: having the possibility of declaring static operations when writing interfaces; like this:<br />
<br />
<b> public interface IMyInterface</b><br />
<b> {</b><br />
<b> static void DoStaticOp();</b><br />
<b><br /></b>
<b> static bool IsThisTrue { get; }</b><br />
<b><br /></b>
<b> ... instance properties and operations ...</b><br />
<b> }</b><br />
<br />
This presents a challenge to both, polymorphic rules and abstract declarations, that is, at a "static" level. But as usual, with the proper rationale and care when modifying the language specs, it could be achieved. Maybe, many of you would be asking: "why bother?" but believe me when I say that I happened to meet situations where static operations on intefaces would have come really handy.<br />
<br />
Well, this is it for today. What would you guys like to see implemented in C# 6 and beyond? Comments are welcome.<br />
<br />
See ya when I get back,<br />
~PeteUltraheadhttp://www.blogger.com/profile/07831144482704209713noreply@blogger.com1tag:blogger.com,1999:blog-34025596.post-74410064415069224272013-12-19T13:45:00.003-02:002013-12-19T15:55:21.031-02:00THE ASSET PIPELINE EDITOR - PART 6After a short break to do some marketing about the APE (sigh!), it's time to resume posting so the turn goes to a couple of recent additions I implemented into the core functionality:<br />
<ul>
<li>"Direct" build (what?), and</li>
<li>Asset Packagers (oh yeah, baby!)</li>
</ul>
<div>
These features have been requested by some of you, so here they are ...</div>
<div>
<br /></div>
<div>
<h3>
<b>Direct Builds</b></h3>
</div>
<div>
<br /></div>
<div>
In part 4 of the series I mentioned that there were two actions when compiling assets, the first one was "build" and the second one "copy/move", and the way to indicate whether to copy or move assets was by (un)checking the following checkbox:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlIGfG4ug14WAac32N_FyZDmkYQtpAhHq7CYCc3tHgVl1xSW6nRjxN49R8Mk89nHNVS9Fhxq2t81Iw137EH_Z-s7-SCDGpNF8Q5vDjq-1a6hGWz5ZMWOorZHmL4qIBHkF4FtKf/s1600/ss_03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlIGfG4ug14WAac32N_FyZDmkYQtpAhHq7CYCc3tHgVl1xSW6nRjxN49R8Mk89nHNVS9Fhxq2t81Iw137EH_Z-s7-SCDGpNF8Q5vDjq-1a6hGWz5ZMWOorZHmL4qIBHkF4FtKf/s320/ss_03.png" width="230" /></a></div>
<div>
<br /></div>
<div>
Well, as a corollary of the command-line tool "APEBuild", a new third option may take place: direct build. Now you can indicate the APE to compile assets directly on the output folder instead of doing it on the "local" folder. In short, it's a way to reduce steps. No need for move or copy.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiko5TwlVPLkl6nO3OsPDW2bLq2HDK9u3UdwP9VNB7Ckeq6SWp-ej_jn-wApdJJO939x6ITdJKqeP3DvouiyTvzrph1jnQgPJAPUjWV-cZzjZ_DiZHFKIT_Waf8G-0quZtv80HM/s1600/ss_01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiko5TwlVPLkl6nO3OsPDW2bLq2HDK9u3UdwP9VNB7Ckeq6SWp-ej_jn-wApdJJO939x6ITdJKqeP3DvouiyTvzrph1jnQgPJAPUjWV-cZzjZ_DiZHFKIT_Waf8G-0quZtv80HM/s400/ss_01.png" width="287" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
So, you will have three options from now on: "Copy Assets", "Move Assets" and "Direct Build". Needless to say that the "Default Copy Action" field ("Copy Always", "Copy If Newer" and "None") will be only enabled when "Direct Build" is disabled and that this feature can also be used with APEBuild.</div>
<div>
<br /></div>
<div>
In the picture above, if you look at it carefully, you will have a preview of what I'll talk next ...</div>
<div>
<br /></div>
<div>
<h3>
<b>Asset Packagers</b></h3>
</div>
<div>
<br /></div>
<div>
Throughout the years, as a moderator in the creators' forums, I read many questions regarding the possibility of zipping your whole content folders. Recently, it has been brought to my attention (thanks again <a href="http://geeks.ms/blogs/jcanton/">Javier</a>) that some authorware offers the possibility of compressing all output into a single zip file.</div>
<div>
<br /></div>
<div>
Guess what? Now you can also do it with the APE!</div>
<div>
<br /></div>
<div>
How come? Simple ... you create your own packager (where you can use any of the compression techniques available in .NET 4.5, use third-party libraries or add your-own compressor) and when you plug it into the APE, the latter will show it as an option on the General Settings tab:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlm5RgvgCY_cmr1vZNyzonxsoJnCVO3mOLZcjEa4WJr4KoumgDC__-U2SXPULl0xy6lFiGBjhH44FsOrctytzhIu5Pccut8qWmbcbY2F3g6H0VL07E17HqRrWet1hpdSF-Gq58/s1600/ss_02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlm5RgvgCY_cmr1vZNyzonxsoJnCVO3mOLZcjEa4WJr4KoumgDC__-U2SXPULl0xy6lFiGBjhH44FsOrctytzhIu5Pccut8qWmbcbY2F3g6H0VL07E17HqRrWet1hpdSF-Gq58/s400/ss_02.png" width="287" /></a></div>
<div>
<br /></div>
<div>
By default, as usual, there is a "pass-through" packager built-in, named "No Packaging", which we can use for the cases where no zipping is required. </div>
<div>
<br /></div>
<div>
So, when you create/load a solution, its panel will look like this:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzPYYepXDW8Jzb2z5bDBXNkK7U26vXkzTkCdMwKNnkBELvAzU4Dz5Oat3kQmB8SgtTqGryK1S-6b83dOOTKrsqYcG9lCXvFF8DaOteNO1QWQqO8N5h5dyhXzPDkK6gSpBrnWmT/s1600/ss_03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzPYYepXDW8Jzb2z5bDBXNkK7U26vXkzTkCdMwKNnkBELvAzU4Dz5Oat3kQmB8SgtTqGryK1S-6b83dOOTKrsqYcG9lCXvFF8DaOteNO1QWQqO8N5h5dyhXzPDkK6gSpBrnWmT/s400/ss_03.png" width="288" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div>
<br /></div>
<div>
We can then select the packer along with the writer to set as the default one for the solution (which of course, can be overriden per project). But that is not it ...</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiB8Rsi2xVaxTdYySZEOcVADsJ5leHzm-bBeZC9kmWPbhZAaXiX6HFDojb0F5fXUxu-25twUuQqgy4RS5k0P-r2psd61FRidqhfOg515mb0ol31XkVbSJWMj8ZV_yloT9Tw6fwA/s1600/ss_04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiB8Rsi2xVaxTdYySZEOcVADsJ5leHzm-bBeZC9kmWPbhZAaXiX6HFDojb0F5fXUxu-25twUuQqgy4RS5k0P-r2psd61FRidqhfOg515mb0ol31XkVbSJWMj8ZV_yloT9Tw6fwA/s400/ss_04.png" width="288" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div>
The picture above shows a new field to set in the Project Settings tab: "Pack To". By default, that field will initially equal the path assigned to the "Copy To" field, that is, the output path. But you can change it, in case you need to have a different target directory for the zipped file.</div>
<div>
<br /></div>
<div>
This opens a new set of possibilities since selecting a packager won't disabled copy/move operations, and vice versa. So, if you decide to copy assets and also create one huge compressed files for the whole structure, you can set a different path for the packed files and presto! Do you want just the packed files? No problem, set either the direct build or activate copy/move actions with "None", and you will only get the zipped file.<br />
<br />
As I say, you can build, build+copy/move, build+package, build+copy/move+package, direct build, direct build + package. Pick the right combination for your project's need.</div>
<div>
<br />
Please notice that the packaging action is meant to apply to a whole structure of assets and not to each asset individually; in other words, alike assets writers -which affect each raw file individually as part of the import/export process even though they are applied per project, asset packagers affect a structure of folders and asset files per project. Say you have a folder named "Content" with all the asset files built in the last execution of the command, then this folder is the one the packager will take as a reference to create and output the compressed file (or the compressed files you decide to output).<br />
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHePJUVx489Njh_i41eyH9OsaczUS9_Sh2AVrovdKvOoyYXPgCNlutMaxk4IG7Jx3KnxN5HkkjdnGgX7X01bqTnvV46MS9jUDEAdYCK6gaKpFDYsoGK9LGHnJS32C4sSXBg436/s1600/ss_05.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="410" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHePJUVx489Njh_i41eyH9OsaczUS9_Sh2AVrovdKvOoyYXPgCNlutMaxk4IG7Jx3KnxN5HkkjdnGgX7X01bqTnvV46MS9jUDEAdYCK6gaKpFDYsoGK9LGHnJS32C4sSXBg436/s640/ss_05.png" width="550" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Last but not least, the "Writers" tab has been renamed to "Output Providers" given the fact that it now includes a configuration panel for packagers, where you can select the packager to use per compilation profile and configure its properties, if any is available.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
In the example above, no packaging is set for the Windows target platform and the "Debug" compilation profile. Plus, since this default packager is a pass-thorugh one, there are no public properties you can tweak.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
And again, this feature is automatically included in APEBuild!</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div>
<h3>
<b>To sum up ...</b></h3>
</div>
<div>
<br />
With these two additions, the APE now covers several use cases: from usual ones to the weirdest! Thus, I am eager to see what you guys come up with when the first released version of the APE gets launched ...<br />
<br />
Btw, I continue working on this handy solution as we speak, so new and exciting features are added on a daily basis.<br />
<br />
We are close to start the campaign at IndieGoGo so I hope you stick around!!!<br />
<br />
'till next post,<br />
~Pete</div>
Ultraheadhttp://www.blogger.com/profile/07831144482704209713noreply@blogger.com2tag:blogger.com,1999:blog-34025596.post-13089267629541164482013-12-13T16:56:00.002-02:002013-12-13T18:58:43.773-02:00THE ASSET PIPELINE EDITOR - PART 5In this part of the series I'll answer some of the questions that some of you've been asking me lately, in particular:<br />
<br />
<ul>
<li>Does the APE watch source files?</li>
<li>Is there a command-line version of it? And</li>
<li>Why not publish it as open-source?</li>
</ul>
<div>
I attempted to give brief answers to a couple of them in this thread at GameDev, and also by email to the guys behind the WaveEngine, but I think they deserve a post here with further details.</div>
<div>
<br /></div>
<div>
So, let's begin ...</div>
<div>
<br /></div>
<h3>
<b>Does the APE watch source files?</b></h3>
<div>
<br /></div>
<div>
To aswer this question, I need to explain what happens when a new solution is created and saved.</div>
<div>
<br /></div>
<div>
Basically, after saving a solution you will find the following structure on disk:</div>
<div>
<br /></div>
<div>
<b> + Root Path</b></div>
<div>
<b> + [Solution's Name] folder</b></div>
<div>
<b> - [SolutionFileName].fps</b></div>
<div>
<b> + "Sources" folder</b></div>
<div>
<b> - sourcefile1</b></div>
<div>
<b> ...</b></div>
<div>
<b> - sourcefileN</b></div>
<div>
<b> + "Projects" folder</b></div>
<div>
<b> + [Platform1's Name] folder</b></div>
<div>
<b> - [ProjectFileName1].fpp</b></div>
<div>
<b> + "Builds" folder</b></div>
<div>
<b> + [Profile1] folder</b></div>
<div>
<b> - output.fpb</b></div>
<div>
<b> + Content folder</b></div>
<div>
<b> ...</b></div>
<div>
<div>
<b> + [PlatformN's Name] folder</b></div>
<div>
<b> - [ProjectFileNameN].fpp</b></div>
<div>
<b> + "Builds" folder</b></div>
<div>
<b> + [Profile1] folder</b></div>
<div>
<b> - output.fpb</b></div>
<div>
<b> + Content folder</b></div>
</div>
<div>
<br /></div>
<div>
The APE creates a folder named "Sources" which will be used as a "local" repository for the whole solution. Within it, you will only find files (no folders). Thus, when you add a new file to any of your projects, the APE will copy that source file to the respository and create the corresponding raw file to the strcuture of your solution.</div>
<div>
<br /></div>
<div>
Following this rationale there is no need to <u>dynamically</u> watch file changes. Why? Simple, if you manually change one of the source files directly then the next time you build content that source file will be used to build assets provided it complies with the condition indicated for building: Always|New|None.</div>
<div>
<br /></div>
<div>
In other words, the APE watch changes over an existing source file only at the moment that new builds are requested. If a project is marked as "Build Always" then no matter what, all included raw files will generate a new asset file. If a project is marked as "Build If New" then only raw files with new source files assigned will end up having a new asset file. Finally, "None" will exclude the project from the build process.</div>
<div>
<br /></div>
<div>
Now, there was a second part in the question posted on GameDev's forum with had to do more with the processing-side of things than with what I've explained above.</div>
<div>
<br /></div>
The APE will NOT replace production tools like Photoshop, Sound Forge, and so on so forth. So you will need to create your source files there: jpegs, wavs, mov, etc.<br />
<br />
What the APE provides is a way to indicate how to process source files to get the file format you need for your games. In case the built-in import/write units or the ones provided later on by me and or any other user are not useful to you, then you can implement your own with full control over them.<br />
<br />
So, if you guys want to implement a processor that converts WAVs into OGGs, you can go ahead and do it with ease. What about resizing a texture? Sure. What else? Everything you can imagine of that can be achieved by setting parameters on a property grid.<br />
<br />
For example, for the case of XNA'ers, <a href="http://amapplease.blogspot.com/2013/12/the-asset-pipeline-editor-part-4.html">in part 4 of the series</a> I showed a processor with many features that pre-multiply alpha, resize textures, change formats and so on.<br />
<br />
So to sum up this part of the question, to create source files you will need to use production tools. But to import them to your games with as asset files with given format, you can use the APE.
<br />
<br />
<h3>
Is there a command-line version of it?</h3>
<div>
<br /></div>
<div>
Yes, there is! And it's name is "<b>APEBuild</b>" (thanks <a href="http://geeks.ms/blogs/jcanton/">Javier</a> for suggesting the name!).</div>
<div>
<br />
When I designed the APE I took into consideration server-side-like use cases. As a matter of fact, it resulted as a corolary when I develop the base test assembly for import/write units (please refer to <a href="http://amapplease.blogspot.com/2013/12/the-asset-pipeline-editor-part-1.html">part 1</a> to see an image of it).<br />
<br />
In the current state of this command-like tool, only two actions can be executed: either you build an entire solution or only a set of projects. Let's have a look of the structure ...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiRDDsMK4dC_zSl-n_7VSNJxCflM_UxItRW1NBgOvp9kvthXmCPq_5JAVwwx7SRJdU4psoa0SLSAiPukIVTa0UfhF5fPWBg8Zlc40ynGnmbpRILBOJtvrKKwilD3URTe21aRBk/s1600/ss_01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiRDDsMK4dC_zSl-n_7VSNJxCflM_UxItRW1NBgOvp9kvthXmCPq_5JAVwwx7SRJdU4psoa0SLSAiPukIVTa0UfhF5fPWBg8Zlc40ynGnmbpRILBOJtvrKKwilD3URTe21aRBk/s400/ss_01.png" height="307" width="520" /></a></div>
<br />
The picture above shows what you get when execute the tool with no parameters (and also with wrong parameters).<br />
<br />
So, if you want to build a solution, just execute the tool with one parameter: the path to the solution file. And if you want to build some of the projects in the solution, then add "p:" as an argument, followed by the names of the target platforms, separated by a comma. See the example in that picture.<br />
<br />
Now, there are a few restrictions: first, the solution filename must always end with ".fps"; second, the tool will handle trimmed versions of the platforms' names; third, all passed platforms must exist in the solution or the tool won't execute; and fourth, when you pass a relative path to the solution, the path to the folder where APEBuild is located will be considered the root folder in order to build the absolute path.<br />
<br />
So, when we execute the command for the entire solution we have been using as an example on the series, this is the result for a successful build:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEvQSi_07hE9Fl48ozs2xqK0LU9wci07138EriV_lGHuzBQvImKIJi5_4lE1Lt3f8DSntU2ZJZN_281bWpu0f3dmJr3suWAYxhCTXgwk4nCOMUxfI6roWjYueKntWZNaistFyr/s1600/ss_02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEvQSi_07hE9Fl48ozs2xqK0LU9wci07138EriV_lGHuzBQvImKIJi5_4lE1Lt3f8DSntU2ZJZN_281bWpu0f3dmJr3suWAYxhCTXgwk4nCOMUxfI6roWjYueKntWZNaistFyr/s1600/ss_02.png" height="226" width="520" /></a></div>
<span id="goog_1448287053"></span><span id="goog_1448287054"></span><br />
And when you execute the command for a couple of pojects, the result would be the following:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGLsehhnxLC88C8aGUnGWdozcSD6c0ESd7D-3ArWMzag8yr30zbHScFwVc3RfV6K040zPVOyMtULaAfVJ97mqNRmKKWuxzzG_y3N0-pw7uBGfJOORwsvkJ2Ol7uldsN0Y0NsYU/s1600/ss_03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGLsehhnxLC88C8aGUnGWdozcSD6c0ESd7D-3ArWMzag8yr30zbHScFwVc3RfV6K040zPVOyMtULaAfVJ97mqNRmKKWuxzzG_y3N0-pw7uBGfJOORwsvkJ2Ol7uldsN0Y0NsYU/s1600/ss_03.png" height="226" width="520" /></a></div>
<br />
You will also get messages in case of warnings and exceptions:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIcoMTCd8KiBrVOStyrxC1voSufW3E3c_rt49sOUS-G0lzwrQ1hiRDUHmZnhFF7RxBXDufoPtlPkng0EbS6s3LmGx7s8jMsZVv7pgFtnkyvqIZv-a43_rPQj_qt7SWNC6msik2/s1600/ss_04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIcoMTCd8KiBrVOStyrxC1voSufW3E3c_rt49sOUS-G0lzwrQ1hiRDUHmZnhFF7RxBXDufoPtlPkng0EbS6s3LmGx7s8jMsZVv7pgFtnkyvqIZv-a43_rPQj_qt7SWNC6msik2/s1600/ss_04.png" height="244" width="520" /></a></div>
<br />
The above picture shows a warning indicating that an import unit that should have been plugged into the tool as an add-on is missing. However, since it's not used during the build process, the latter runs normally.<br />
<br />
So, it is important to remember that:<br />
<br />
1. Before executing the command you will need to check that all the import/write units are present in the corresponding folders associated to APEBuild (as you would also do with the APE's editor), and<br />
<br />
2. When you commit source files, you will also need to commit the updated versions of the APE's solution/project files to the server or otherwise you won't get the results you were most-likely looking for.<br />
<br />
There are some features I'd like to add in future versions like, say, verbosity control (that is, the level of detail you get as output), but the tool gets the job done in its current state, what is really handy!<br />
<br /></div>
<h3>
Why not publish it as open-source?</h3>
<div>
<br />
I'd have prefered to address this question more close to the campaign's launch date, but since a few of you've asked this question recently, I decided to answer it now.<br />
<br />
But before moving forward, I'd like to state that <u>I will neither argue nor open a discussion regarding whether open source is good or bad business-wise</u>, since that depends on factors whose relevance may vary per person (yes, "YMMV") and therefore not only does it lay beyond the scope of this post but also I don't feel like pursuing a Phyrric Victory.<br />
<br />
Instead, I'll be posting a few words explaining my decision to publish it as a commercial tool in the near future -that is, provided the campaign at IndieGoGo succeeds.<br />
<br /></div>
<div>
Honestly, I haven't decided yet the price for a license but I intend to license the APE per seat per platform <u>per major version</u>. Yes, if you buy one license at launch, you will be able to use it for the whole v1.x! No annual subscriptions, no different versions for indies/pros, no complications to anyone.<br />
<br />
Now, although the price is not yet decided, believe me when I say that it will be low and <u>even lower for those of you who decide to contribute to the campaign at IndieGoGo</u>. I'm an indie, so I know what it feels not being able to afford licenses from time to time. So during the campaign it'd be like going out with some folks to a movie theatre, say, on Friday's night.<br />
<br />
So, why this decision?<br />
<br />
First, open souce is difficult to keep alive in time. You need to coordinate efforts, check contributor's code, handle branches, even maybe, at some point and to some extent, include contributors into the decision-making process.<br />
<br />
But that is not it, most of the people in the team would likely have daytime jobs, so development of updates to the tool would be done during the night provided the is some spare time left. Going to college? Does your job demand most of your productive time? Have a wife/husband? How about some kids? Then, you know the drill ...</div>
<div>
<br />
It's not a surprise that many open source APIs and tools eventually follow the commercial route, or that their owners publish a letter indicating why the cannot continue working on it or that updates will slow down. <u>It's completely understandable</u>! There's lot of time, effort and even money put into it, and even though donations could be received, the latter eventually end up being not enough to even cover costs of production. Not to mention, costs of living.<br />
<br />
So, instead of trying the open source route first to then follow the commercial one, I prefer to skip that part and commercialize licenses of the APE from square one. Succeeding in this task will assure the continuation of the tool since I will dedicate, not my spare time, but my production one to make it happen. And if I fail I'll continue to use it as is for inhouse projects. No hard feelings.<br />
<br />
I have one more thing to add in this respect as an example: the guys behind the Mono Framework started the project as a non-profitable endeavour. But then, they realized that in order to continue offering the products they loved to develop, a change in course was imminent. For many, this could have been a change in principles but for me <u>it was a wise decision</u>. Today, they're successfully runnning Xamarin, they're growing strong and their products are a must have for every serious dev that want to port .NET-based apps/games to many platforms. <a href="http://www.businessinsider.com/microsoft-and-xamarin-getting-friendly-2013-7">And even MSFT recognizes it</a>!<br />
<br />
Btw, regarding XNA's Content Pipeline: it was freely available as long as you didn't want to develop games for the XBox 360 (and then, the Windows Phone). Otherwise, you had to pay an annual subscription for the Creators' Club and a registration fee for the Windows Phone (both now unified).<br />
<br />
So to wrap up this third question, before using the word "disappointing" -given the fact that it won't be open source, please give the APE an opportunity to show off its key features and wait for the campaign at IndieGoGo. You won't be dissapointed!<br />
<br />
Ok, this is it for this part of the series. Hope you all come back for the upcoming part 6 next week.</div>
<div>
<br /></div>
<div>
See ya next time,</div>
<div>
~Pete</div>
<div>
<br /></div>
<div>
PS: btw, I recommend you to have a look at <a href="https://store.xamarin.com/">Xamarin's subsciption plans</a> if you haven't yet!</div>
Ultraheadhttp://www.blogger.com/profile/07831144482704209713noreply@blogger.com0tag:blogger.com,1999:blog-34025596.post-55428636797951908842013-12-11T20:01:00.001-02:002013-12-11T21:00:12.373-02:00THE ASSET PIPELINE EDITOR - PART 4On part 3 of the series, I talked about some of the features related to solutions and projects. So now it's time for me to refer to another key feature of the editor: building assets.<br />
<br />
The picture below shows the last state of the solution we were using as an example for the series:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUNb_YJt6bq0cz1-SVj9r0NV2FPgxgfAniGS0eUn4h-WtZiQGO15gyXcaDTtDDiDnEYRKV9T-Uuna5_TaHUhuafWnVe-TAq1KWDg00N4PcRP4Ijh9krojkFSkiHkylQnADzzdU/s1600/ss_10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUNb_YJt6bq0cz1-SVj9r0NV2FPgxgfAniGS0eUn4h-WtZiQGO15gyXcaDTtDDiDnEYRKV9T-Uuna5_TaHUhuafWnVe-TAq1KWDg00N4PcRP4Ijh9krojkFSkiHkylQnADzzdU/s400/ss_10.png" width="260" /></a></div>
<br />
Let me remind you that the raw files named "bkgClouds" were bound to different source files: one sized 640x400 texels and another sized 320x200 texels.<br />
<br />
Since the APE does not come bundled with any import/write units other than the pass-through ones, y clicking in one of the raw files we'll get the following view on the raw file tab:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhI8x0dz_ZDnk4ATkfFcIClRk5DwETigu3Ue2LERDyUM2N-EydXP1zSFxOuwWfbDANo9oHNnlk1pzJPdm1xEMjbnTCajr5L9Ul-9_AUb_L45nbO0zGE8SXYFdcF6ZE3LcI9AlLC/s1600/ss_01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="207" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhI8x0dz_ZDnk4ATkfFcIClRk5DwETigu3Ue2LERDyUM2N-EydXP1zSFxOuwWfbDANo9oHNnlk1pzJPdm1xEMjbnTCajr5L9Ul-9_AUb_L45nbO0zGE8SXYFdcF6ZE3LcI9AlLC/s320/ss_01.png" width="320" /></a></div>
<br />
Thus, as you can see, the pass-through importer is assigned by default to all the raw files in the solution. This default importer has no properties we can modify since all it does is to copy the source file associated to each raw file to the destination folder without any kind of processing/formatting.<br />
<br />
However, there is one property that I'd like to highlight here that I didn't mention on my previous posts, and that is the checkbox named "Build Asset ?". If you have been following the series then you'll likely remember that for solutions and projects you could indicate the actions to execute for building and copying/moving, right? Well, this checkbox allows us to override those settings for a specific raw file, so if we unmark it, no build/copy actions will be applied to that raw file.<br />
<br />
In fact, if you carefully look at the first screenshot above corresponding to the solution tree, you will notice a checkbox beside some of the nodes. By checking/unchecking that control not only we can include/exclude a raw file for build/copy actions but also the nodes of an entire folder or container. And yes, when you save solutions and projects, this selections are also persisted. Nice!<br />
<br />
Now, how can we build an entire solution or a specific project? Glad you asked. Please take a look at the picture below and follow the numbers:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCgDJMOcGGPK03XlJqbLHmlUkWZDrfjYdCbYWriADKWr_KxbCdRoHQ-3e9dtdBPaihhK4ScQnx71dScKgfEKUOZsu52BAAkqwxjJUYMsRhBDHpkVIYv3x5VDE6inFs8gsQ1bsT/s1600/ss_02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="325" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCgDJMOcGGPK03XlJqbLHmlUkWZDrfjYdCbYWriADKWr_KxbCdRoHQ-3e9dtdBPaihhK4ScQnx71dScKgfEKUOZsu52BAAkqwxjJUYMsRhBDHpkVIYv3x5VDE6inFs8gsQ1bsT/s640/ss_02.png" width="520" /></a></div>
<br />
First, for each project at a time, check the Project tab and select the corresponding values for each field. In particular for this example, we need to set the build/copy actions and indicate the correct path to copy/move the asset files. For now, we disregard the Group Id field and the writers grid since we have only one writer we can use at this moment and thus we have no use for the former.<br />
<br />
Second, we indicate which nodes among the containers, folders and raw files must be included in or excluded from the build process by checking/unchecking the respective checkbox.<br />
<br />
Third, we select the correct writer for the project ("Default Writer") for the compilation profile to use ("Debug", as shown in the picture above).<br />
<br />
Fourth, we select whether to build the entire solution (that is to say, all projects) or one project (the one shown in the Project tab). Also, we indicate the target compilation profile (the one that corresponds to your game's executing assemby, as compiled in Visual Studio, Xamarin Studio, Eclipse, Netbeans or other).<br />
<br />
Having done that, we also need to indicate for the solution whether we want our asset files copied or moved to their final location ...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlIGfG4ug14WAac32N_FyZDmkYQtpAhHq7CYCc3tHgVl1xSW6nRjxN49R8Mk89nHNVS9Fhxq2t81Iw137EH_Z-s7-SCDGpNF8Q5vDjq-1a6hGWz5ZMWOorZHmL4qIBHkF4FtKf/s1600/ss_03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlIGfG4ug14WAac32N_FyZDmkYQtpAhHq7CYCc3tHgVl1xSW6nRjxN49R8Mk89nHNVS9Fhxq2t81Iw137EH_Z-s7-SCDGpNF8Q5vDjq-1a6hGWz5ZMWOorZHmL4qIBHkF4FtKf/s400/ss_03.png" width="287" /></a></div>
<br />
Then, we are ready to go. So all we need to do is compile the solution or project by clicking the "Build" button (the arrow in green).<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE5I33w1I1t05nCNdI9C2KMRvifKqmCZRBwQYrHFfajla5TN09OiT9Z7dcEzlFZ3GpwP6pr0NxUiJwHhhTMA310Q3dYVLWnBy5zD-rF4F-xIf_-GgJN_rZrS9gu6YYZGpr0jpw/s1600/ss_04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE5I33w1I1t05nCNdI9C2KMRvifKqmCZRBwQYrHFfajla5TN09OiT9Z7dcEzlFZ3GpwP6pr0NxUiJwHhhTMA310Q3dYVLWnBy5zD-rF4F-xIf_-GgJN_rZrS9gu6YYZGpr0jpw/s1600/ss_04.png" /></a></div>
<br />
You can also build the solution or project using menu options, "F5" for the entire solution or "Control + F5" for the selected project.<br />
<br />
Now, what result shall we obtain for our example? To see that, we pick one of the projects in the solution explorer and open its folder with the "Open In Explorer" menu option, say, the iPhone.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwk4zbhu1MUX4yJQ_MxjArw14fxg9lZYXGeBZ1-PxU3K5cTyFhqWA3pccZMmuLFG3HEky0kPaw0Y3VWotef31DkUX7_8E6w668NwusSRqyN28NNbZZeUQwCj-MfRWwBA31ST6R/s1600/ss_05.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="87" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwk4zbhu1MUX4yJQ_MxjArw14fxg9lZYXGeBZ1-PxU3K5cTyFhqWA3pccZMmuLFG3HEky0kPaw0Y3VWotef31DkUX7_8E6w668NwusSRqyN28NNbZZeUQwCj-MfRWwBA31ST6R/s400/ss_05.png" width="400" /></a></div>
<br />
You will get as an asset file a copy of the image sized 320x200 texels. And believe me when I say that if we built the entire solution (or only the Windows project) we also get the image sized 640x400 texels as an asset file located in the path corresponding to the Windows project.<br />
<br />
But this isn't all we get as the picture below shows:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDGCiVTrGfwX9FHq6yIuad-UGb71OoReOJ7smdLe49JXoxHHd60_m8KQhNYcfgm2m8JNd41_vUl9zpW43CuPUkEfbwbrwCy8Yj2PO1qLF-nOFSLI578lkbo_te4qyTmPJvLDuf/s1600/ss_06.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="102" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDGCiVTrGfwX9FHq6yIuad-UGb71OoReOJ7smdLe49JXoxHHd60_m8KQhNYcfgm2m8JNd41_vUl9zpW43CuPUkEfbwbrwCy8Yj2PO1qLF-nOFSLI578lkbo_te4qyTmPJvLDuf/s400/ss_06.png" width="400" /></a></div>
<br />
The Ape mantains a repository on the corresponding path for our solution, but is also moves/copy the obtained files with the correct path structure to the location you specify as an output folder, adjusted for the corresponding compilation profile. Since we said we wanted all our asset copied, the "local" repository keeps a copy of all asset files. Otherwise, no local copies would exist.<br />
<br />
Again, when we compile the solution we also obtain the asset for non selected projects -provided they are alos marked for build + copy/move actions.<br />
<br />
Now, when your game expects a file with a specific format (other than public ones like png, jpg, wav, wmv, and so on so forth) and or a specific file extension, then the above example is not useful for you. Therefore, for the following example I'll use a Texture2D importer and a XNA-like writer for a Monogame project. But please remember that you can use the APE for any game engine not related to XNA/Monogame, provided that the corresponding import/write units are plugged into the editor.<br />
<br />
So, allow me to introduce you to a nice feature that the APE has: clean solution/project.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1zVAYOelvXKEBWADWwZ1moGGlj0G3fdIVMlWGQu6hGrJKdTfm6tMlSuvW62aHgCrWaTOYjPaZxeaYSv6gYu8h1CmbF892Ay7NK97TdOlcyNtdRPiDuyhNOxjHvYnA86_7nKAi/s1600/ss_13.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="160" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1zVAYOelvXKEBWADWwZ1moGGlj0G3fdIVMlWGQu6hGrJKdTfm6tMlSuvW62aHgCrWaTOYjPaZxeaYSv6gYu8h1CmbF892Ay7NK97TdOlcyNtdRPiDuyhNOxjHvYnA86_7nKAi/s400/ss_13.png" width="400" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtQjRxc7-Bs9oI-xRXqc8Ctba5ZishWpf5u4_JhSEdmfQssequ9HvlTG8Ar9KaJQ3uQAyWaO4agzfgdUzD8LxW8_GXg_691EQWlv7HAfLqoiN4qR2liHtI335YRkDb2uUgX3BS/s1600/ss_14.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="160" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtQjRxc7-Bs9oI-xRXqc8Ctba5ZishWpf5u4_JhSEdmfQssequ9HvlTG8Ar9KaJQ3uQAyWaO4agzfgdUzD8LxW8_GXg_691EQWlv7HAfLqoiN4qR2liHtI335YRkDb2uUgX3BS/s400/ss_14.png" width="400" /></a></div>
<br />
Both operations are similar, being the only difference that cleaning the solution will clear the content of all projects. This operations must be used <b>with caution</b> since they will delete the entire content of the folders indicated in the corresponding lines and not only raw files and nested folders. So before pressing start we should check that the paths are right. You can always cancel the operation by clicking the cancel button or by closing the window -in case you need to. And you can indicate whether to clean one folder (the local folder or the output folder), both folders or none. This is indeed a handy and powerful feature, don't you think?<br />
<br />
Ok, after cleaning the solution and adding the corresponding import/write units to the editor we are now able to reload our solution and once we get it, we need to get something like this:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNqLwQtgKYmjJTUAvaNDmlMPKVITcyNPMU9TJ_8lfztHf6Tfqlep9wWM_TYRgPd3DnLvmgZsOBwUNXmiERexT6EqEPWUv3RFFU-h40_r4SgZ5CNh1BtT5CWchLpW3HBuckV-ZY/s1600/ss_07.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="325" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNqLwQtgKYmjJTUAvaNDmlMPKVITcyNPMU9TJ_8lfztHf6Tfqlep9wWM_TYRgPd3DnLvmgZsOBwUNXmiERexT6EqEPWUv3RFFU-h40_r4SgZ5CNh1BtT5CWchLpW3HBuckV-ZY/s640/ss_07.png" width="520" /></a></div>
<br />
In order to get it, first we need to select the only raw file we have on the Windows Project. Then, we need to select the category "Textures" (1) and finally select the importer named "Xna Texture Importer" (2), which in this case is selected by default. As you can see we get some information about the importer and, in this case, a couple of read-only properties ("Group Id" and "Is Source File Also Copied ?").<br />
<br />
As a result of the above we can now realize in practice how the Group Id field on the Project tab can be used (3): a value of zero indicates that we want to target XNA/Monogame's HiDef profile and a value above it the Reach profile.<br />
<br />
If we expand the panel with the properties for the 2D Texture Processor we'll get:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGtw45U64Ykjvlfu6Eyu4tDRRf6A8UexdMpA7YaJlz9R37imSGJ-oQzGqxgKCMiv9EPTleKIoEiVceowKChEHJJ6OkMUIJywrmetbC5nZ6B8GUvrI3HDdsHAGNIPNXOn_wENxG/s1600/ss_08.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGtw45U64Ykjvlfu6Eyu4tDRRf6A8UexdMpA7YaJlz9R37imSGJ-oQzGqxgKCMiv9EPTleKIoEiVceowKChEHJJ6OkMUIJywrmetbC5nZ6B8GUvrI3HDdsHAGNIPNXOn_wENxG/s400/ss_08.png" width="310" /></a></div>
<br />
I won't explain each of the fields you see there. Some of them are similar to what we had on XNA's CP GUI but there are some additional ones -which I believe speak for them-selves. All I can say is that this is not a mock-up; in fact, it's a real processor in alpha stage currently consuming WPF's bindings for WIC. During the campaign at IndieGoGo I'll give more details about this.<br />
<br />
After tweaking some of the parameters, let's have a look at the formatter:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDoSkAGFWJt9tuqHs4Tk_z_7rtCIWQ_1CQ5LHYwZwwyapWeSLD4vMi8Gp-PrIfBfQnbf6VOrhDQLYa9ENIBkgGWIjt-HN-lUES7LLa8Y94HCd4ZaFlHQLbH-xTXbYC1msJ5F5H/s1600/ss_09.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="98" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDoSkAGFWJt9tuqHs4Tk_z_7rtCIWQ_1CQ5LHYwZwwyapWeSLD4vMi8Gp-PrIfBfQnbf6VOrhDQLYa9ENIBkgGWIjt-HN-lUES7LLa8Y94HCd4ZaFlHQLbH-xTXbYC1msJ5F5H/s320/ss_09.png" width="320" /></a></div>
<br />
Nothing to do here. The "Xna Binary Formatter" will give the proper format to the asset data but with one difference for those of us accustomed to XNA's CP (given the way I've implemented these import/write units): the XNA's header for the asset file is not included as part of the format. That will be added by the writer later on. Needless to say that you can design your import/write units so that the formatter includes the header instead of the writer, which is fantastic given that it shows how flexible the APE really is!!!<br />
<br />
Ok then, and please again follow the numbers, before proceeding to compile the texture asset for the Windows project we'll need to get something like ...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2SQoi4cOGxjsACvYsergmPwPU3Ir6io8gEn4zDHlchztn94n0pcFMqRSvZ0PHPmLoxXDWSSVXBSEAGPz8Ta-1JgLl0ZSnnYGud7hOfn8CLWXAJ09ZkCgNat7-52gJB97os51G/s1600/ss_10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="325" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2SQoi4cOGxjsACvYsergmPwPU3Ir6io8gEn4zDHlchztn94n0pcFMqRSvZ0PHPmLoxXDWSSVXBSEAGPz8Ta-1JgLl0ZSnnYGud7hOfn8CLWXAJ09ZkCgNat7-52gJB97os51G/s640/ss_10.png" width="520" /></a></div>
<br />
First, we select the Window project.<br />
<br />
Second, we need to set the proper writer for the compilation profile we are going to use (in this case, for "Debug").<br />
<br />
Third, we need to select the "Normal" compression mode on the Writers panel instead of the "Automatic" one that is shown in the picture above. Why? Because I haven't implemented yet the so called LZX compression -which is a real pain, believe me- or any other compression for the writer.<br />
<br />
I'd like to add a side note here: do you notice the data displayed on the writer panel for the Xna Writer? (default, version, etc.) In particular check the following three: "Writes checksum", "Requires password", "Encodes Data". These fields if marked as "Yes" indicate that the writer May or May Not do the associated task (depending on whether is activated manually/automatically as implemented by us), like calculating an writing an MD5/SHA checksum somewhere into the asset file, adding password protection and or encoding/encrypting the asset file. And if marked as "No" then the writer does not support that action.<br />
<br />
Fourth, and this is really important: <b>we need to save the solution!!!</b> (this is required to apply changes)<br />
<br />
Fifth, we need to indicate that we're going to build only a project (the selected one) for the "Debug" compilation profile.<br />
<br />
Finally, build the assets by pressing the corresponding menu option, button or keyboard shortcut ("Control + F5"), being the result in the local repository the following:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5HTcL2EYS6GP-_NmTH6L9viOuxU8TO1hdB5gTxw_ROJ4m0PfZWIvWgh2JOgegKlR4ejicWU4AdRI745XGCFCdczTgrypcCzM3IGtSoaRwh6MZdg2S-xYDQ5o0RJItscnTN9bZ/s1600/ss_11.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="125" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5HTcL2EYS6GP-_NmTH6L9viOuxU8TO1hdB5gTxw_ROJ4m0PfZWIvWgh2JOgegKlR4ejicWU4AdRI745XGCFCdczTgrypcCzM3IGtSoaRwh6MZdg2S-xYDQ5o0RJItscnTN9bZ/s400/ss_11.png" width="400" /></a></div>
<br />
This is a well-formatted xnb file with pre-multiplied alpha, a mip-mapped chain and its top-most texture resized to the nearest power-of-two value for 640x400 texels (I leave the answer to the latter as homework for you). Since this asset file is not LZX-compressed, its size on disk is rather high. Again, a copy of this file is located on the output folder that the XNA/Monogame solution uses.<br />
<br />
Finally, if we run the game's solution with a line like the following within the method of the LoadContent operation ...<br />
<br />
<pre style="background-color: #888888; background-position: initial initial; background-repeat: initial initial; font-family: Consolas; font-size: 13px;"><span style="color: blue;">
this</span>.texture = <span style="color: blue;">this</span>.Content.Load<<span style="color: #236d82;">Texture2D</span>>(<span style="color: #a31515;">"textures/backgrounds/bkgClouds"</span>);
</pre>
<br />
... and the corresponding one on the Draw method, as shown in the trailer for the APE, we'll get something like this on a WindowsGL-targeted game using Monogame (and please don't ask me "why do you need mipmaps for this example?"):<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhBpQLcXD1L_2b88UpBpDZqGh4R5RaBdzKSJOaHJCMI1cIRuPPKmngafeTJjrI8aUarUGd2m4uLm77efHPCp7yOwwwFMQqXTSDx62QOrzqHGOICj6izPlWTPFNSlqiKcl1vEIy/s1600/ss_12.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="253" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhBpQLcXD1L_2b88UpBpDZqGh4R5RaBdzKSJOaHJCMI1cIRuPPKmngafeTJjrI8aUarUGd2m4uLm77efHPCp7yOwwwFMQqXTSDx62QOrzqHGOICj6izPlWTPFNSlqiKcl1vEIy/s400/ss_12.png" width="400" /></a></div>
<br />
Enough said!<br />
<br />
In the following parts we'll be getting into more technical stuff.<br />
<br />
Cheers!<br />
~PeteUltraheadhttp://www.blogger.com/profile/07831144482704209713noreply@blogger.com0tag:blogger.com,1999:blog-34025596.post-11216039058137995752013-12-10T14:49:00.001-02:002013-12-11T13:46:14.146-02:00THE ASSET PIPELINE EDITOR - PART 3On part 2 of the series, I talked about some basic features of the APE, so it's time to show how to change the structure of a project and populate it with some raw files, that is, before starting to build assets.<br />
<br />
I could begin this post by telling you how to create a new solution from scratch, but instead, I'll show you a nice small feature the editor has that allows you to open recent solutions, which spares you from having to use the Open Solution menu option ("Control + O") and browse folders until you locate the solution file.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTeHI-jphyphenhyphenw2ojrbeZEYn51vHtCyFoqcQDUhdyBLYXgu79Bz7wft1DnW1rTNe_4yGzw59D5wZvwWMiqSRQYkRrBfwaY6dVeKbZR1svI7V0saOZ-0hdkAFbJ4sz50W4Rbos6Ht0/s1600/ss_01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Recent Solution List" border="0" height="182" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTeHI-jphyphenhyphenw2ojrbeZEYn51vHtCyFoqcQDUhdyBLYXgu79Bz7wft1DnW1rTNe_4yGzw59D5wZvwWMiqSRQYkRrBfwaY6dVeKbZR1svI7V0saOZ-0hdkAFbJ4sz50W4Rbos6Ht0/s400/ss_01.png" title="" width="500" /></a></div>
<br />
Do you notice the small red (almost transparent) cross beside the only entry in the list of recent solutions? If you press it, you will be prompted to confirm entry's removal from the list. The cool thing is that APE does not need to restart in order to refresh the list. Ditto for "Clear All ..." option.<br />
<br />
Once the solution is loaded we can start modifying the tree structure to meet the needs for our game. This is how the solution looks like so far:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgL8is7F9Ayz3YTR8ELb2PC3I65ttJobKE-dWc27AWrC1rzibz5-JCzrJr4DILgDEV5fAJYBxYw490VFkyx-hS2MJQYj-ORRMC5iO2pnNOic_gURAEh4KT9eskqdcbTJsHg0Uaq/s1600/ss_02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="The Solution So Far" border="0" height="142" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgL8is7F9Ayz3YTR8ELb2PC3I65ttJobKE-dWc27AWrC1rzibz5-JCzrJr4DILgDEV5fAJYBxYw490VFkyx-hS2MJQYj-ORRMC5iO2pnNOic_gURAEh4KT9eskqdcbTJsHg0Uaq/s320/ss_02.png" title="" width="320" /></a></div>
<br />
Let's add a couple of nested folders to the Windows_Own container by selecting the "Add Folder" menu option (or clicking "Control + Shift + F") twice. Now our solution looks like this:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjh1PCz2veGCTRChOzt3IYIhofjVxuRKbNrwlTbsnMyY-KpPTQBRTrVro1EzXYG3IpVKFFUnVuffCl6TFUvTtBOyQQzv2ASItsQRm7gpvcOQuPdY9DBpYbyCIrWcBirm6i35N3f/s1600/ss_03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="194" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjh1PCz2veGCTRChOzt3IYIhofjVxuRKbNrwlTbsnMyY-KpPTQBRTrVro1EzXYG3IpVKFFUnVuffCl6TFUvTtBOyQQzv2ASItsQRm7gpvcOQuPdY9DBpYbyCIrWcBirm6i35N3f/s320/ss_03.png" width="320" /></a></div>
<br />
By default, folders will be created with the name "folder_<#>", so let's renamed them with a meaningful word (by double-clicking the node):<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgMmI3xtkhBWlucqzmIr8JGUnUeuMpmfKuLL5pYDPqTJsad6tjBnjPtERzz_8VM1gTNyACEMthBvQkLDFO_-DfUwFb220kldFbkW6S9pSDCnr_9GIL5RQtXIzmpv-e7mpUFxpk/s1600/ss_04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="198" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgMmI3xtkhBWlucqzmIr8JGUnUeuMpmfKuLL5pYDPqTJsad6tjBnjPtERzz_8VM1gTNyACEMthBvQkLDFO_-DfUwFb220kldFbkW6S9pSDCnr_9GIL5RQtXIzmpv-e7mpUFxpk/s320/ss_04.png" width="320" /></a></div>
<br />
Better, right? But wait a minute! What if we want to have a similar structure on the default container? All you have to do is open a context menu for the node you want to copy (right-click over "textures") and you will be presented with this:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQFXSvvAUPORUVGo8UlB3QaGTbuc6Bi2cLiSPePmhS69uK1CwLd8NnbQ8wrU_J4qH-0umbw0pByf-WovGelrJjLgYbsEfbSQTQsHNb-yJU6fNotvxF9fu5AmVklGSfgTcYUIiw/s1600/ss_05.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="252" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQFXSvvAUPORUVGo8UlB3QaGTbuc6Bi2cLiSPePmhS69uK1CwLd8NnbQ8wrU_J4qH-0umbw0pByf-WovGelrJjLgYbsEfbSQTQsHNb-yJU6fNotvxF9fu5AmVklGSfgTcYUIiw/s320/ss_05.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
\</div>
You have two options there: either you move or copy the node and all of its content to another non-nested location; in this case, to the Windows_Default container. <u>Note</u>: if you try to move or copy the "images" folder into the "backgrounds" folder the operation will fail.<br />
<br />
Since we want to replicate the structure, we then select the copy option. Then, by opening the context menu fro the default container we will get the following:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7yenHayBk09is_jtVgV_8PJuH56bMsSv1BP2grLPW5XurqpG3IE9-4L7cVGd0bLXeK30wxZsPMDfrUWuF7DLwn4QzY-RxgymnG3sMFunC40P356yR_NL6pRqz0eEJH1kLiTx-/s1600/ss_06.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="169" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7yenHayBk09is_jtVgV_8PJuH56bMsSv1BP2grLPW5XurqpG3IE9-4L7cVGd0bLXeK30wxZsPMDfrUWuF7DLwn4QzY-RxgymnG3sMFunC40P356yR_NL6pRqz0eEJH1kLiTx-/s320/ss_06.png" width="320" /></a></div>
<br />
By pressing paste, the new structure for our solution will look like this:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvEXhfYoct1DydSW5bUuuLxYT5Ub6VNdMTfV_jNubzh0KGWDUIx7KgIm6LZ0NZjwkaRcUueBMnadjPzTRxD04STqUBQsnszw0c10RZwZv2Ssn0J7Ow3nafpeBnVr7E4dc08COH/s1600/ss_07.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="257" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvEXhfYoct1DydSW5bUuuLxYT5Ub6VNdMTfV_jNubzh0KGWDUIx7KgIm6LZ0NZjwkaRcUueBMnadjPzTRxD04STqUBQsnszw0c10RZwZv2Ssn0J7Ow3nafpeBnVr7E4dc08COH/s320/ss_07.png" width="320" /></a></div>
<br />
It's important to mention here than we could have obtained the same result by using <u>drag'n'drop</u>. Yes! Dragging the textures folder and dropping it onto the default container would have been allowed. In fact, when you drag'n'drop nodes in the solution explorer, the APE asks us what we want to do with them: move, copy or cancel.<br />
<br />
Also, it's worth mentioning that, in this case, we could have copied the whole content of the self container ("Windows_Own") by using the context menu for the container. That is also allowed. The difference is that in this case the container it-self won't be moved or copied, just its child nodes.<br />
<br />
Now, let's add some raw files. Shall we?<br />
<br />
There are three ways to add raw files to containers or folders: (a) you select the container/folder and then use the "Add Raw File" menu option/button (or press "Control + Shift + R"), (b) you select the container/folder, open the context menu for it and click on the "Add Raw File" option, or (c) you use drag'n'drop (you can import raw files into your solution by dragging them from the explorer and dropping them onto the container/folder).<br />
<br />
In the picture below, you can see how to use the context menu for the target folder.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZ_2HDgkH9E7N8TTBvFIFwt6tp2UbWdOpeDOtpH5pUF7sN5vTXKNOdVW_CcxqMXqdpyHadU-Zj9DUTKCwtlwgMr1sknnjgZ5j6EGDygQ6j_Tb-ZP2EavCp1AQrh2PBljsx_7a8/s1600/ss_08.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="262" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZ_2HDgkH9E7N8TTBvFIFwt6tp2UbWdOpeDOtpH5pUF7sN5vTXKNOdVW_CcxqMXqdpyHadU-Zj9DUTKCwtlwgMr1sknnjgZ5j6EGDygQ6j_Tb-ZP2EavCp1AQrh2PBljsx_7a8/s320/ss_08.png" width="320" /></a></div>
<br />
One important feature to mention here is that you can import more than one file at a time (<u>batching</u>) with any of the three ways the editor offers, including drag'n'drop.<br />
<br />
For the example, we just added a nice cloud background to the backgrounds folder:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiezRcJaUeWO9cDYdddB-Kw8FtFpfMC1cspjL5V1nYiEJPqvY9uKngLj_UU793FoeguehHxY-czWqDTVbKDTr8KKdU8gFhHgT6dgmLx8xciqT0i_Nyq7X4ONUTefvN9X89X5ed/s1600/ss_09.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="325" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiezRcJaUeWO9cDYdddB-Kw8FtFpfMC1cspjL5V1nYiEJPqvY9uKngLj_UU793FoeguehHxY-czWqDTVbKDTr8KKdU8gFhHgT6dgmLx8xciqT0i_Nyq7X4ONUTefvN9X89X5ed/s640/ss_09.png" width="520" /></a></div>
<br />
The picture above shows a lot of new information about the editor:<br />
<br />
1. The name given to the added raw file is its filename (without the extension, if any). This is true provided that the name does not exist in the same "relative" location of the solution's structure, or else it will be renamed to "file_<#>".<br />
<br />
2. On the container tab, the editor will show you the proper previewer for the file (remember that if none is found it will just show the system icon for it).<br />
<br />
3. A new tab gets enabled: "Raw File". Here is were you tweak import settings for the raw file. The APE will try to assign an importer to it based on the file extension, giving priority to the importers marked as default (more on this on later posts).<br />
<br />
4. The source file is copied into the "Sources" folder for the solution. This folder works as a repository for the entire solution, so you cannot have two source files co-existing with the same name on the folder since one of them will be replaced. This has nothing to do with the names you give to the nodes on the solution explorer (you can have two nodes with the same name in different "relative" locations on the solution tree).<br />
<br />
In order to change the name of the raw file we could do it in the same way as before by double clicking on the node, but in this case we will use the "Name" field on the raw file tab and rename the node to "bkgClouds".<br />
<br />
Now, before showing you how the structure of the solution currently looks like, let's add a new project for, say, the iPhone platform. And here it is ...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUNb_YJt6bq0cz1-SVj9r0NV2FPgxgfAniGS0eUn4h-WtZiQGO15gyXcaDTtDDiDnEYRKV9T-Uuna5_TaHUhuafWnVe-TAq1KWDg00N4PcRP4Ijh9krojkFSkiHkylQnADzzdU/s1600/ss_10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUNb_YJt6bq0cz1-SVj9r0NV2FPgxgfAniGS0eUn4h-WtZiQGO15gyXcaDTtDDiDnEYRKV9T-Uuna5_TaHUhuafWnVe-TAq1KWDg00N4PcRP4Ijh9krojkFSkiHkylQnADzzdU/s400/ss_10.png" width="260" /></a></div>
<br />
As you can see the default containers on both projects have the same exact structure; however, the self containers are different. In effect, that is the purpose of self containers.<br />
<br />
Although the "bkgClouds" raw file is present in both default containers, it is treated as a deep copy; so mirror operations are bound only to add/remove/copy/move. For properties, like importer, processor and formatter-like settings, each node is independent, so you can have one set of settings for the raw file for the iPhone and a different set its sibbling on Windows. Really great!<br />
<br />
Now, what if you want to import two different source files but keeping them under the same raw file on different projects? Let me translate it with an example ... say that you want to replace the source image for bkgClouds but only on the iPhone project with a lower_res version, well ... yes, you can! How? Simple. Look at the picture below:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrW-kSl6Yz7KlL-K0VEvJEm8V7ss5fLntBa5PAS0TebAm-yNdFp4qh9PXZBfsIMDZu8fvk1M1k2GAT-2uYAK45dTGhTE2553pctsS4sHJsU5jh_IJmZng-LMwOyCO36U1uEpLt/s1600/ss_11.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrW-kSl6Yz7KlL-K0VEvJEm8V7ss5fLntBa5PAS0TebAm-yNdFp4qh9PXZBfsIMDZu8fvk1M1k2GAT-2uYAK45dTGhTE2553pctsS4sHJsU5jh_IJmZng-LMwOyCO36U1uEpLt/s400/ss_11.png" width="400" /></a></div>
<br />
On the Raw File tab there is field named "File" with a button labeled "..." (marked all in red), which shows the location to the source file in the solution. When you click on the button you can browse your folders until you get the file you desire.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguRY3YL_niB4CyjVoJvw3xIwn54DUa0fajSmj4RB7-1qdlOHSl9Zs-KKmlPc_zxHgYA_HfYr8N6PN_rLiKDjZbw3NrgCr7317WFuldJJudxY2oej57JcuyUayQMW7YvEnLlN8t/s1600/ss_12.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="152" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguRY3YL_niB4CyjVoJvw3xIwn54DUa0fajSmj4RB7-1qdlOHSl9Zs-KKmlPc_zxHgYA_HfYr8N6PN_rLiKDjZbw3NrgCr7317WFuldJJudxY2oej57JcuyUayQMW7YvEnLlN8t/s320/ss_12.png" width="320" /></a></div>
<br />
In this case, we'll select the 320x200 texels version of the cloud image for the iPhone platform to get this window:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgb7piF5bq1-qnZSoZwVx_9JcGLQqZgBs3YeFw2ySLi67MsKlAMejg3RQhIPUpgV9fEHiXnn6Y8COJSIJSRK-FCLBVy0cKPQVxoqj2VcKWBEB7JD1lYYPc7ciW80_a2IAz6rlQz/s1600/ss_13.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgb7piF5bq1-qnZSoZwVx_9JcGLQqZgBs3YeFw2ySLi67MsKlAMejg3RQhIPUpgV9fEHiXnn6Y8COJSIJSRK-FCLBVy0cKPQVxoqj2VcKWBEB7JD1lYYPc7ciW80_a2IAz6rlQz/s320/ss_13.png" width="312" /></a></div>
<br />
The APE will prompt us to confirm the operation and also it'll let us delete the existing source file if needed. Since this is not the case, given that we need both of them (one for Windows and the new one for iPhone) we let this checkbox unmarked.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifIZgn5rvqRAE9A-WdC93TRlWwahuRxe2KM0PfVkChJXKbcXH64tlqaJdUnpBtT3DXpNAH5W9aJTiXTT9PzT7GS4TRbdKsOCrQd-42DN0VbHottJdpafl2oHJ_7lPxxMVA-XEt/s1600/ss_14.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifIZgn5rvqRAE9A-WdC93TRlWwahuRxe2KM0PfVkChJXKbcXH64tlqaJdUnpBtT3DXpNAH5W9aJTiXTT9PzT7GS4TRbdKsOCrQd-42DN0VbHottJdpafl2oHJ_7lPxxMVA-XEt/s320/ss_14.png" width="320" /></a></div>
<br />
Once the operation completes, the image previewer for the "bkgClouds" raw file on the iPhone project will show the new information. Now we have two different source files for the same logical name. And therefore, after building assets, when you load the "bkgClouds" texture on your game, you will get the 640x400 version on Windows and the 320x200 on the iPhone. No need to add "_640x400" or "_320x200" to the load operation.<br />
<br />
Let's have a look at our solution's Source folder:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRE83lfseQyWs1x4Oa3Kd3KxIKMmik8n-rRJr9YPbjaybBRbDhhh8ccsl4KlOlbYGGyt_aFFWS-QJSqQ6ms8duB6a8UP3vS3H6eeB6RyOqNyzXb0qjXpzb9XRuhQMhq615sj8z/s1600/ss_14.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="127" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRE83lfseQyWs1x4Oa3Kd3KxIKMmik8n-rRJr9YPbjaybBRbDhhh8ccsl4KlOlbYGGyt_aFFWS-QJSqQ6ms8duB6a8UP3vS3H6eeB6RyOqNyzXb0qjXpzb9XRuhQMhq615sj8z/s320/ss_14.png" width="320" /></a></div>
As you can see, the respository has both source files for the same raw file. And I guess that you now fully understand the difference between "source" and "raw"" file (if not, the former is the actual file and the latter its representation on the solution's tree).<br />
<br />
Ok, before finishing this post, let me show you one more relevant feature the APE offers. For this task, say that you accidentally messed with the Source folder and deleted one of the images; for instance, the one ending in _640x400. What would happen? Well, when you re-open the editor, you will see the following:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMB-CDSkOEA1JQyEF_7VoaV9XvBrTJpeCA79gDwFxn3YegSjjuTtXTzIrGvx4VKO5u35ojTjwvcaG_SV-bBHpgnfPwDvhHCIZZRqyT_zHBS95Mn7RwIEDuPOyYgMOXNb9ZHtOz/s1600/ss_15.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMB-CDSkOEA1JQyEF_7VoaV9XvBrTJpeCA79gDwFxn3YegSjjuTtXTzIrGvx4VKO5u35ojTjwvcaG_SV-bBHpgnfPwDvhHCIZZRqyT_zHBS95Mn7RwIEDuPOyYgMOXNb9ZHtOz/s400/ss_15.png" width="260" /></a></div>
<br />
The APE is indicating you that the solution is corrupted and also marks the path to the offending raw file. To fix it, you can either manually copy+paste the source file to the Sources folder or you can use the Raw File tab -as we did before- by clicking the "..." button beside the "File" field and browsing to the location of the source file.<br />
<br />
In order to valdiate the solution you have to options, either you save, close and re-open the solution (in which case the APE will warn you that you are attempting to save a corrupt solution) or use the validate menu option ("Control + Shift + V") ...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCKnlBRbJPgPOwcFNLuihl_jvsn8Zqhiupg7cseVYYPYVymKIaucE_BzYfht0vLboWCI9z0FuNkGbJnRFN1qNHXPVrdbZPyQNV8WfFZOyuJ4a5p8_Rb_nwlHAGJKq6hOgpvlaT/s1600/ss_16.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCKnlBRbJPgPOwcFNLuihl_jvsn8Zqhiupg7cseVYYPYVymKIaucE_BzYfht0vLboWCI9z0FuNkGbJnRFN1qNHXPVrdbZPyQNV8WfFZOyuJ4a5p8_Rb_nwlHAGJKq6hOgpvlaT/s400/ss_16.png" width="220" /></a></div>
<br />
Having finished the validation processed, the editor will look like this:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtqpM0rVQuDkTltHZPhKGCXctzPnwqJxvlgtZVOj68XTHcMp8piQQBmz3U33S2pDMAvWsrVaUMN6rzBJKgGi7Fi0yfYlI30tuipM8p2ozB7zGiSLmkHbqS7qQafbX03ZI6AIb9/s1600/ss_17.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="325" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtqpM0rVQuDkTltHZPhKGCXctzPnwqJxvlgtZVOj68XTHcMp8piQQBmz3U33S2pDMAvWsrVaUMN6rzBJKgGi7Fi0yfYlI30tuipM8p2ozB7zGiSLmkHbqS7qQafbX03ZI6AIb9/s400/ss_17.png" width="520" /></a></div>
<br />
So, we can now safely continue to work normally with our solution and save it whenever we want.<br />
<br />
Btw, you can browse to the folder where you solution is located by using the "Open In Explorer" menu item (ditto for projects) ...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPDzXH3F5br2m10QbDG3Il1YoF14-FfXUKM0Fo3iU_8R6V3EMFy8vgkKimO-QGc83y9DzOvwtve5ujI4UNe6Zazq-eiAGGLtr8FYivg-9taulEHBG07IllF9YogY3sU8lBDOAH/s1600/ss_18.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPDzXH3F5br2m10QbDG3Il1YoF14-FfXUKM0Fo3iU_8R6V3EMFy8vgkKimO-QGc83y9DzOvwtve5ujI4UNe6Zazq-eiAGGLtr8FYivg-9taulEHBG07IllF9YogY3sU8lBDOAH/s320/ss_18.png" width="293" /></a></div>
<br />
And you'll get to ...<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaq98ycWTX9BwQkBOWNVRhPJ07Vrt47WxVj64ZdTiXJjGqZA1gehZWfxSzkArxS6HrTNmTB5f87TqGImVxk09eThBBkoRbHul5cCm8O8BCY7Dv1bFIgQTcm7EeW1TB69DeGiUY/s1600/ss_19.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="133" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgaq98ycWTX9BwQkBOWNVRhPJ07Vrt47WxVj64ZdTiXJjGqZA1gehZWfxSzkArxS6HrTNmTB5f87TqGImVxk09eThBBkoRbHul5cCm8O8BCY7Dv1bFIgQTcm7EeW1TB69DeGiUY/s320/ss_19.png" width="320" /></a></div>
<br />
Do you notice the icon on "MySolution"? When the editor is closed you can open it and also load the solution by clicking its file. Indeed. The APE will open and load the solution for you.<br />
<br />
Ok guys, this is all for this post. On my next post we'll talk about building assets.<br />
<br />
See ya!<br />
~PeteUltraheadhttp://www.blogger.com/profile/07831144482704209713noreply@blogger.com0tag:blogger.com,1999:blog-34025596.post-81329532396893212742013-12-09T16:40:00.004-02:002013-12-09T18:07:03.450-02:00THE ASSET PIPELINE EDITOR - PART 2Continuing with the second part of the series, and before writing about technical stuff (the coding side), let me introduce you to the editor it-self.<br />
<br />
When the Ape starts, the editor looks like the picture below:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbh0HmqSirS7pcidmbzr3WlwO38mM0JSHjS9j0zxNYAw8rGLTFZrbBNnp8evf2vjM3PLCv1PlXj1XwJh_mkrxfXNVPMsFzvnylkDBa09kp5kaGZpNKQEZVCTTQxXrWcJadJsko/s1600/ss1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Main Window" border="0" height="325" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbh0HmqSirS7pcidmbzr3WlwO38mM0JSHjS9j0zxNYAw8rGLTFZrbBNnp8evf2vjM3PLCv1PlXj1XwJh_mkrxfXNVPMsFzvnylkDBa09kp5kaGZpNKQEZVCTTQxXrWcJadJsko/s400/ss1.png" title="" width="520" /></a></div>
<br />
By default, the only tab that is enabled is the one named "General", where you can configure general settings to control the editor's behavior. There are a few options that speak for them-selves, like "Automatic check for updates", so I will refer to others which I believe deserve a few words since they will affect each solution/project created in a cascade manner:<br />
<br />
<b>1. Default Main Folder:</b> every time you create a new solution, this is the folder that will be shown by default on the Folder dialog. Think of it as the directory that will hold your solutions and projects.<br />
<br />
<b>2. Default Root Folder:</b> for every project created, this is the relative root folder assigned by default to each container. For those like me who come from XNA-based games, this is usally set to "content".<br />
<br />
<b>3. Default Build Action:</b> this is the action to execute when building assets from raw files in solutions/projects, which can be "Build Always", "Build If Newer" and "Do Not Build".<br />
<br />
<b>4. Default Copy Action:</b> this is the action to execute when copying assets after a build action finishes on a project, which can be "Copy Always", "Copy If Newer" and "Do Not Copy". You will see later that this also refers to "moving assets".<br />
<br />
<b>5. Available Platforms:</b> this is the platforms that a solution can support and you can add/remove custom platforms to the ones provided by default. The one marked with an asterisk "(*)" indicates the project that will be automatically added when a new solution is created.<br />
<br />
<b>6. Default Writers Per Profile:</b> this control has two purposes; you can add/remove/modify custom compilation profiles as well as the write units assigned by default to each and every one of them; again, the compilation profile marked with an asterisk "(*)" indicates the one that will be selected by default when a new solution is created.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEIXQDD3Bh7ZMXIzwHq49HNTIY_Kf4xuSc6wLPHUQgOZ9yBo6xyLTDWbMHBl-f6VcfWziq0-eLIq6cPS9ktn5VWwrgETWY6TiVIYQaWj17hioFcqRWa7v3Ro2-_i6b0OMUZYJ9/s1600/ss2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Add Compilation Profile Window" border="0" height="182" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEIXQDD3Bh7ZMXIzwHq49HNTIY_Kf4xuSc6wLPHUQgOZ9yBo6xyLTDWbMHBl-f6VcfWziq0-eLIq6cPS9ktn5VWwrgETWY6TiVIYQaWj17hioFcqRWa7v3Ro2-_i6b0OMUZYJ9/s320/ss2.png" title="" width="320" /></a></div>
<br />
When you add a new profile, you can set its name, the relative folder where assets will copy/move when built, and the default write unit for it. We'll get to the concept of a write unit on a later post.<br />
<br />
<b>7. Default Importers Per Category: </b>every import unit corresponds to a category (that you can set when creating the importer), so what you can define here is which will be the default importer for each category. When you add a raw file, the editor will find the category it fits in and from there it will try to assign the default importer; if no importer is found, it will move to a default category and importer (pass through).<br />
<br />
<u>Note</u>: both, import and write units are plugged into to the APE as add-ons, so when you execute the tool, the editor will automatically create the collection of available import and write units.<br />
<br />
<b>8. Save/Reload Settings:</b> when you change general settings you have to options: either you save the settings for future use or you reoad settings previously saved; if no settings are found (or saved settings get corrputed) the APE will generate and save default settings for you.<br />
<br />
Now, what are Solutions and Projects?<br />
<br />
A solution is the root node in the APE's logical tree which will directly hold projects as its child nodes. In other words, is the root node that will contain asset projects.<br />
<br />
A project is the node that will contain the structure that will be used to build assets for a specific target platform. You can have as many projects you want on a solution but only one per target platform.<br />
<br />
When you build a solution, all the project it contains will be built (unless you specify not to build one or more projects). Conversely, when you execute the build action on a specific project, the other will remain intact.<br />
<br />
In order to create a new solution, you can open the "File" menu and select the "New Solution" option, click on the "New Solution" icon on the main tool bar, or press "Control + Shift + N".<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlmhyphenhyphen9SgoOLDAZ6SEmbbL9WRU5Jn-ozghZcdHPB2YnZMOZ0DhV_d0iFFkXFQjCFEKQaW5kYmYhDCTPx_wvvEVjiTCc7dR2zI7vYLbIS4kVifPhXjfqQ4y7eBbnoB5soO3J6gaR/s1600/ss3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="New Solution Window" border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlmhyphenhyphen9SgoOLDAZ6SEmbbL9WRU5Jn-ozghZcdHPB2YnZMOZ0DhV_d0iFFkXFQjCFEKQaW5kYmYhDCTPx_wvvEVjiTCc7dR2zI7vYLbIS4kVifPhXjfqQ4y7eBbnoB5soO3J6gaR/s320/ss3.png" title="" width="320" /></a></div>
<br />
When you do that, a pop-ip window will prompt you to enter specific information like the name to give to your new solution, the folder where the solution file will be saved, whether a subfolder with the name you enter must be created or not and the "Output folder".<br />
<br />
The latter is quite important since it indicates the path to the root folder where all assets generated for the default project will be copied or moved. It works like this, say you have a Visual Studio solution for a game you are developing (or a repository for the assets, not the raw files- to be used); you browse to this path, you select it, and from there the APE will append at build time the relative folders corresponding to the selected compilation profile as well as to each container, when it corresponds.<br />
<br />
The initial structure of a solution is the following:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgesRTUIDUv0bkJqd7tPifQhydOOmSf01vlUleDK2EQTMuPAoKE34wlr8kUInIEGQXGk3N-NxT6Z60l9IFJzA2VbV42IkXp4IPskg2URmOncV950SplfJPZSzK3-CW352JkI6Vc/s1600/ss4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Initial Structure Of A Solution" border="0" height="280" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgesRTUIDUv0bkJqd7tPifQhydOOmSf01vlUleDK2EQTMuPAoKE34wlr8kUInIEGQXGk3N-NxT6Z60l9IFJzA2VbV42IkXp4IPskg2URmOncV950SplfJPZSzK3-CW352JkI6Vc/s320/ss4.png" title="" width="320" /></a></div>
<br />
Being the only project created the one that corresponds to the target platform inidicated as the default one on the general settings.<br />
<br />
As you can see in the picture above there are two more nodes that are created by default within the project: the initial containers ending in "_Default" and "_Own".<br />
<br />
The former holds raw files shared with all projects. Thus, when you add a new raw file to that container, a new node will be also added to the default containers in all remaining projects, with the same name.<br />
<br />
And the latter holds raw files assigned only to that project. So, this container is where you put raw files that you don't want to share with other projects.<br />
<br />
Now, there is a third type of container: partial containers (to which I also refer sometimes as "shared" containers).<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-a8XLYVn01HW6Fg8s9_RlI1w0ocj5ICnUgIo00X29czo2WQu702T1HNoWJlFzTcxrO8KmEp0XauUKmXojxnJsUfv-4rZcgyir_DZHxKPKk8ZAKmTy5kOP13e1rXzLV3_smHd8/s1600/ss6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Add New Shared Container" border="0" height="274" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-a8XLYVn01HW6Fg8s9_RlI1w0ocj5ICnUgIo00X29czo2WQu702T1HNoWJlFzTcxrO8KmEp0XauUKmXojxnJsUfv-4rZcgyir_DZHxKPKk8ZAKmTy5kOP13e1rXzLV3_smHd8/s320/ss6.png" title="" width="320" /></a></div>
<br />
Say that you have three projects in the solution (Windows, XBoxOne, PS4) and you want to share content on the first two (Windows and XBoxOne); well, in order to do that you create a partial container for the windows project, add the XBox One platform and presto!<br />
<br />
To add more projects to your solution you either select the "Add Project" item on the "Solution" menu, you click the "Create Project" button or press "Control + Shift + P".<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEik1bJwGxLU3ebvY2IhBhBoEao7WlU7L875w84fErp0TTTeV6qqGuTBNO63XKuFKK53Hvuzz2Ko__Nxh1Up3tKGKDfYbPJmLkIEdabpYwDiGx1cVVYh2cAAm7GTp7_45ebd2Zdl/s1600/ss5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Add Project To Solution" border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEik1bJwGxLU3ebvY2IhBhBoEao7WlU7L875w84fErp0TTTeV6qqGuTBNO63XKuFKK53Hvuzz2Ko__Nxh1Up3tKGKDfYbPJmLkIEdabpYwDiGx1cVVYh2cAAm7GTp7_45ebd2Zdl/s320/ss5.png" title="" width="320" /></a></div>
<br />
Again, you will be prompted to specify the output folder for the new project.<br />
<br />
Ok, moving on ...<br />
<br />
When you create or load a new solution, you will see that other tabs will get enabled: "Solution", "Project" and "Container".<br />
<br />
Many options in the Solution tab are similar to the ones found in the General tab; in fact, this is where you start to benefit from the cascade approach given that you have the possibility to override the default values given to each "shared" option.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFDW_UVUjgvYzkVcqU5Cp3yuFkoq3Pqw_oUZLM1UvpnHWw3w98k8GRKSR5cEnaP-_ZUmbrtjcRO6Jn-OMJnEFFe2Zr34kBXrguBwqomXQS0b5hWpC_gpX9klE71GT0tK85Q4MG/s1600/ss7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Solution Tab" border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFDW_UVUjgvYzkVcqU5Cp3yuFkoq3Pqw_oUZLM1UvpnHWw3w98k8GRKSR5cEnaP-_ZUmbrtjcRO6Jn-OMJnEFFe2Zr34kBXrguBwqomXQS0b5hWpC_gpX9klE71GT0tK85Q4MG/s400/ss7.png" title="" width="283" /></a></div>
<br />
But there is one more relevant option you can set for a solution: "Move Assets". The only explanation I will post for now is that when you build assets, the APE save them on a specific repository for each project and then, copy or moves each asset to its final destination folder (the one located in the output folder for a project).<br />
<br />
For projects, the logic is the same as before, tweak parameters to override default values coming from the solution or general settings.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBHkuuxSwTnEW4dhoq8n8ZV7sB-1HqZ5LIBK93exZYz5SsR5kXr_wUMdiJ8a6Kb_l9dPaz1bOpQF4dxsdR-baOlKeA5eN4-9F_Mxhjmz3dBillNPxDAk1ZAnqBVOLOXuItLKTN/s1600/ss8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Project Tab" border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBHkuuxSwTnEW4dhoq8n8ZV7sB-1HqZ5LIBK93exZYz5SsR5kXr_wUMdiJ8a6Kb_l9dPaz1bOpQF4dxsdR-baOlKeA5eN4-9F_Mxhjmz3dBillNPxDAk1ZAnqBVOLOXuItLKTN/s400/ss8.png" title="" width="355" /></a></div>
<br />
Here you can also indicate:<br />
<br />
<b>1. Group Id:</b> even though you can set different behaviors per platform, you can also indicate affinity among specific platforms in order to set the course of action for import/write units. For instance, for XNA-based projects, and id of zero ("0") would mean a "HiDef" profile meanwhile one ("1") or above would mean "Reach" profile.<br />
<br />
<b>2. Copy To:</b> remember that for new solutions you had to sepcify the output folder for the initial project? Well, you will have to do the same for the new project. So, each project can have its own output path, which is strongly recommended so that you avoid the risk of overwriting asset files.<br />
<br />
<b>3. Default Writers:</b> not only you can override the values that come from the solution or general settings, but also you can change the folder that will be added to the output path when building assets for a specific compilation profile (like Debug, Release, etc.).<br />
<br />
Regarding the Container tab, there is no much you can do there other than change the root folder, which is initially set to its default value (usually, "Content").<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiH5xMspy4Xkl5uNfXuwF7HH__1DTXi225cGzt68t6oMpRQMjye_uSN34aQZt0IOIEj24mE-AiGfLjU7FOJKbWUl996QZow4Krmd1p3uWkGtGTmvFBLDG0uWaRNnNjGxOUJ0elt/s1600/ss9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Container Tab" border="0" height="170" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiH5xMspy4Xkl5uNfXuwF7HH__1DTXi225cGzt68t6oMpRQMjye_uSN34aQZt0IOIEj24mE-AiGfLjU7FOJKbWUl996QZow4Krmd1p3uWkGtGTmvFBLDG0uWaRNnNjGxOUJ0elt/s320/ss9.png" title="" width="320" /></a></div>
<br />
For default and self containers, names cannot be changed. For partial containers, you can set a different name, and you will also get a list of the projects it shares content with.<br />
<br />
There is another tab that is also activated when a solution is created or loaded ("Writers") but I will refer to it on my next post.<br />
<br />
Before reaching the end of this part, I would like to refer to the search tool, which you can use when you want to find nodes in the solution that start with a specific character or group of characters ("Control+F").<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheQOJZc3irstj6PZy-HRn6f6PGF7y8b6WwWhTcJYEJ3RgAuuXbKHhG5YaYJ5HJ4Selh5UVR9IRp8Ay-nD-I1ERAf_QS5ElPYh2DQbR5794tlrO71gTYMYwDGl3CHQhluqAddln/s1600/ss10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Search Tool" border="0" height="291" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheQOJZc3irstj6PZy-HRn6f6PGF7y8b6WwWhTcJYEJ3RgAuuXbKHhG5YaYJ5HJ4Selh5UVR9IRp8Ay-nD-I1ERAf_QS5ElPYh2DQbR5794tlrO71gTYMYwDGl3CHQhluqAddln/s320/ss10.png" title="" width="320" /></a></div>
<br />
The beauty of this control is that you can do a new search recursively, that is, on top a previous search. So if you first search for "Windows" and then for "myImage", you will get all the nodes (and its children) that start with "myImage" within the nodes that start with "Windows". By the way, the top-most node (the solution) is not considered for this feature, so the result it would have been the same if you had entered "my" instead of "myImage".<br />
<br />
By pressing the "Reset Search" button or "Control+Alt+F" the whole solution is again displayed on the explorer.<br />
<br />
This is a powerful tool and I'm planing to extend it with additional features in the middle run.<br />
<br />
Well, that's it for now. On part 3 I will talk about adding raw files, compiling projects and a few more useful features available on the APE.<br />
<br />
Stay tuned,<br />
~PeteUltraheadhttp://www.blogger.com/profile/07831144482704209713noreply@blogger.com0tag:blogger.com,1999:blog-34025596.post-12535451713987588502013-12-06T15:08:00.000-02:002013-12-06T17:28:36.761-02:00THE ASSET PIPELINE EDITOR - PART 1Now that the cat is out of the bag, I believe its time to start posting some details about the Asset Pipeline Editor (from now on, "the APE").<br />
<br />
So, what is this tool? To answer it, let's travel through time to a point, say, four years ago or so.<br />
<br />
To make the long story short, during the golden age of XNA I was in the search of an efficient way to replace the built-in content manager class with my own. So I created my own version of this class, but I was still using XNA's content pipeline.<br />
<br />
Then, when MSFT announced that they would stop any development on the XNA Framework, like many of you, I remained captive of Visual Studio 2010 IDE for building xnb's. During this year, I decided not to wait any longer for miracles and start building my own content-pipeline replacement.<br />
<br />
Let's face it! How many of you have been lately crying out loud for XNA 5? Or asking where the content pipeline has gone? You still need VS2010 to use the content pipeline if you want to use XNA, Monogame or ANX. And no definitive solution has been provided yet. And even if there is something in the works, is it worth for teams?<br />
<br />
Be honest here. You guys know that the in game development a content pipeline is indeed needed, <b>but why sticking to a particular IDE for programmers (like VS) or any other programming IDE in the first place?</b> It could make sense for programmers only, but for teams, artists, or even for solo devs that want to have an independent process, it does not. In fact, it could turn out to be cumbersome.<br />
<br />
So, that is why I developed the APE. To replace XNA's content pipeline "in spirit" (since it has key deifferences) for those inhouse projects where I wasn't using Unity, UDK or any other authorware with its own content management features.<br />
<br />
I must admit that at first I wasn't expecting to get these results, since I was aiming lower, but as times went by, I realize that -and please allow me to say it- I was creating something really good. So I went on until I said "Wow!".<br />
<br />
Now, <u>about its key features:</u><br />
<br />
<b>1. Its not for XNA, only:</b> it works for any kind of custom content, not only xnb's. In fact, if you have your own way to manage content when programming a game or provide solutions (like WaveEngine, for instance), you can use it safely since the tool ends its job when the asset its build and copy to the folder you indicate.<br />
<br />
<b>2. It's a highly customizable tool:</b> not only you can tweak the editor to meet the needs for your project (to some extent, of course) but also you can define your own building process: import, process, format, writing. You dream of it. You got it.<br />
<br />
<b>3. It eases the task of managing game content:</b> that's it, throughout the whole development process. If say, you just want to use the input files as is, like pngs, jpegs, and so on so forth, without any processing, you can because the editor comes with pass-through units. So you can still use the tool to manage which content goes where, even if there is no processing required.<br />
<br />
<b>4. It's independent from any programming IDE:</b> this is heaven for artists! If you are a solo programmer working on a game, having to use VS to build content is fine, but when you're woring on a team with artists this is not good at all. The APE comes with a GUI of its own.<br />
<br />
<b>5. Test before you promote units:</b> "why is my custom processor not working?". Say bye-bye to these kind of questions since you can test your custom "units" (as I call them) before using them with the editor. Indeed. You can build your own testing assembly for your custom content/process. And once you give it a green light you plug it to the editor as an add-on.<br />
<br />
Here you can see the main editor as of today:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://images.indiegogo.com/file_attachments/239576/files/20131203092508-Cuadro_1.png?1386091508" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="300" src="http://images.indiegogo.com/file_attachments/239576/files/20131203092508-Cuadro_1.png?1386091508" width="500" /></a></div>
<br />
<u>The areas indicated in the picture above are the following</u>:<br />
<br />
<b>1. Solution Tree:</b> create a solution, add a project for a platform, and you will be able to traverse all the nodes here. Projects can have two or more containers: self, default and partial. And you can add as many folders as you want to each container. In future parts I post more details about this.<br />
<br />
<b>2. Search Tool:</b> if you need to see specific nodes of the tree this is a quick way to do it. It works recuresively over the last search, so you can go on reducing results until you find what you want.<br />
<br />
<b>3. Output Settings:</b> for every "raw file" that you want to import, you can define how to process it and format it. And for each project, you can define how to write ("export") assets to disk. These are powerful tabs. More about them later ...<br />
<br />
<b>4. Build Tool:</b> here is where you decide whether to build assets for the whole solution (all projects) or for a specific project; and also where you define the compilation profile: debug, release, test, ... you name it ... add the ones you need for the solution. You will be able to watch it on a how-to video, later.<br />
<br />
<b>5. Configuration Tabs:</b> so far there are four: general settings, solution settings, project settings and container settings. Basically, you can tweak many properties there and even add/remove entries for platforms, profiles, default importers, default writers, to mention just a few. In a later post I will cover all settings.<br />
<br />
<b>6. Log Panel:</b> classic in any respectable IDE; here is where the editor informs you about the state of a given process, whether it succeeds or fails, warnings, exceptions. The usual stuff. It's a real friend to understand what's going on. There is more to it than meets the eye, and that deserves another post.<br />
<br />
<b>7. Bars and shortcuts:</b> well, this is not indicated in the picture above, but of course that you have menu items (both, as text and buttons) and key shortcuts for many features. Not to mention, contex menues, where applicable, for example to copy or move content. Ahhh, yes! I almost forget it, drag and drop is allowed.<br />
<br />
I don't want to go beyond the scope of this post, but I cannot help adding the following picture:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://images.indiegogo.com/file_attachments/229317/files/20131128061226-lupa01.png?1385647946" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="398" src="http://images.indiegogo.com/file_attachments/229317/files/20131128061226-lupa01.png?1385647946" width="400" /></a></div>
<br />
<b>Above there's an example of a test assembly.</b> When you create your units for a specific type of asset- by the way, using C#, this is where you debug them and see whether everything works as expected. Add break points, switch over text, find offending code!<br />
<br />
And finally, for this post: "<u>previewers</u>". When you traverse the solution tree and select a raw file (or source file), the editor shows information about the file as well as a previewer for it. By default, the APE comes with previewers for some image, audio and video formats. Or else it will switch to an icon previewer. But the good news is that if you need to preview more formats you can create your own previewers! What is more, you can replace all built-in ones if you want ....<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://images.indiegogo.com/file_attachments/239577/files/20131203092532-Cuadro_3.png?1386091532" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="266" src="http://images.indiegogo.com/file_attachments/239577/files/20131203092532-Cuadro_3.png?1386091532" width="400" /></a></div>
<br />
The picture above is an example of a previewer for an audio file.<br />
<br />
Now, before ending this post there <u>two remaining points I would like to address</u>:<br />
<br />
<b>1. Current State of the APE:</b> ready for my inhouse projects: the units, besides the pass-through ones, are meant for my inhouse projects, only. Plus, there are some features I would like to add (and even some porting to do) before a public release, if you guys are interested in having this tool, so ...<br />
<b><br /></b>
<b>2. What's next:</b> my idea is to start a fund-raising campaign on IndieGoGo to make a first release of the tool, and some extended goals like developing some units for XNA'ers and Monogamers (so they don't have to), and even doing some porting to other platforms like MacOsX and Linux (since so far the tool only works on Windows for .NET 4.5). And yes, the link at the end of the trailer is not working right now as the campaign is currently on draft mode.<br />
<br />
So, this is all for now.<br />
<br />
I hope this post sheds some light on what's the APE about and that you guys are interested. It's upto you guys to define whether this baby eventually sees the public light (if not, I'll continue to use it for my inhouse projects). Your call ...<br />
<br />
'till next posts!<br />
~PeteUltraheadhttp://www.blogger.com/profile/07831144482704209713noreply@blogger.com2tag:blogger.com,1999:blog-34025596.post-15044379960306888722013-12-05T19:34:00.001-02:002014-01-13T16:45:34.772-02:00MY ASSET PIPELINE EDITOR ... FTW!Hey guys, it's been a long time since I last posted something on my blog! So I decided to share a teaser trailer of a tool I've been working on during this year for my inhouse projects ...<br />
... behold "The APE" !!<br />
<div class="separator" style="clear: both; text-align: center;">
<p><iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='540' height='304' src='https://www.youtube.com/embed/oxunD6WEgdk?feature=player_embedded' frameborder='0'></iframe></div>
Sexy, right?<br /></p>
<p>I guess you know the purpose of this beauty, but in case you don't, I'll be posting more details soon.<br /></p>
So, stay tuned!<br />~PeteUltraheadhttp://www.blogger.com/profile/07831144482704209713noreply@blogger.com0tag:blogger.com,1999:blog-34025596.post-69893328942658656442013-03-03T02:51:00.001-02:002013-03-04T10:49:53.379-02:00HOW “OPEN” CONSOLES LIKE THE PS4 OR 720 SHALL BE?<p align="justify">Recently, during <a href="http://reviews.cnet.com/ps4/"><font color="#5b739c">the announcement</font></a> of the Play Station 4, Sony made the promise of bringing the “most open console” for devs.</p> <p align="justify"><a href="http://www.gamasutra.com/view/news/187093/QA_What_does_Sonys_most_open_console_promise_mean.php"><font color="#6699cc">Discussions</font></a> have taken place regarding whether by “open” Sony actually means that the new hardware architecture of the PS4 is somewhat more “familiar” than the one chosen for the PS3 console or that the burden to <a href="http://www.vg247.com/2013/02/21/yoshida-says-the-ps4-will-be-more-open-to-indie-development-than-ps3-was/"><font color="#5b739c">indies</font></a> will be diminished to some extent. </p> <p align="justify">The phrase is really interesting given that for years the access to dev programs for consoles have been and are still are surrounded by a plethora of red-tape (aka “security”) procedures so that as a rule -as opposed to as an exception, mainly (or if you prefer, only) big companies publish games on their “pro” marketplaces.</p> <p align="justify">To be approved as a professional developer for whatever console, you need to demonstrate that financially you are backed up for the whole development and certification process (upfront fees, updates, deadlines, etc.), you must buy tailored hardware for production to have access to the corresponding SDKs, you need to prove that technically you are up to tough QA checks, and so on so forth.</p> <p align="justify">In recent years, the opening of the XBLIG channel on the XBox 360 console may have seemed for many a change in direction, however, it ended up as a way to bring attention to the console without letting an avalanche of indies stain its reputation and even its status quo to an extent that could threaten the very monolithic model imposed to pros. Never wondered why only a few lucky devs made it into the XBLA channel?</p> <p align="justify">One may argue that by upholding all of the above-mentioned requirements, console enterprises keep low-quality games away from their consoles. To some extent, back in the old days they could have, but today, generalizing the term “low-quality games” with low-budget games or indie games is getting more difficult to sustain (in many cases, such association is unfair).</p> <p align="justify"><strong>Ok, but, if this business model has been working fine for console makers, what could make them change to truly support indies?</strong></p> <p align="justify"><strong>1. <u>Apple kicked in</u>:</strong> like it or not, Apple revolutionized the mobile market for smart phones, smart devices and tablets. But the story did not end there …</p> <p align="justify">On an Industry where sagas were turning out to be far from innovative as well as rather repetitive, Apple was smart enough to truly open the door for indies and their fresh ideas, worldwide. </p> <p align="justify">In fact, and in contrast from what MSFT did with XBLIG, Apple made no difference among devs. Everyone that pays the annual fee has access to the whole pack of features. It doesn’t matter if you are a pro or an indie. Is up to you whether to support any of Apple’s services in your game, develop your own or consume a third-party’s solution.</p> <p align="justify">And every game, regardless its developer, must be tested and approved by a group of Apple’s employees.</p> <p align="justify">All that, the fact that any game (pro or indie) could be picked to be featured on the “<a href="https://itunes.apple.com/"><font color="#5b739c">AppStore</font></a>” as well as the growing amount of success stories among indies, contributed to position Apple’s devices on top of the list of target platforms for devs.</p> <p align="justify"><strong>2. <u>Google plays</u>:</strong> following Apple, Google decided to enter the app-publishing market for Android-based devices, and with NaCl, for browsers.</p> <p align="justify">The amount of devices running Android OS is growing fast and Chrome is strongly incrementing its market-share.</p> <p align="justify">Google’s store, currently named “<a href="https://play.google.com"><font color="#5b739c">Google Play</font></a>” is open for pros and indies, the list of approved countries is increasing, and many games that succeeded in other platforms were ported to Android.</p> <p align="justify">Discussions aside whether you like iOS or Android, there is no doubt that Google Play has served as a model for other big firms, like <a href="http://www.amazon.com/gp/mas/get/android"><font color="#6699cc">Amazon</font></a> and <a href="http://www.100percentindie.com"><font color="#6699cc">Samsung (with Chillingo)</font></a>, that decided to follow its lead and open a marketplace of their own.</p> <p align="justify"><strong>3. <u>The power of the Steam</u>:</strong> there are many gamers -particularly hardcore ones- who claim that PC games have nothing to envy from console games. For those gamers, Valve introduced Steam as a means of digital delivery of videogames. </p> <p align="justify">It first started on the Windows platform, then added MacOSX to recently support Linux OS. At the beginning only native-coded bits were allowed, but then Valve allowed managed code.</p> <p align="justify">On recent months, Steam introduced its “Green Light” program, offering new publishing opportunities targeted for indies. In this program, the community decides which games should be granted a green light for publication. One example, is a well-known tower defense game named “<a href="http://steamcommunity.com/sharedfiles/filedetails/?id=96030044"><font color="#5b739c">Kingdom Rush</font></a>”.</p> <p align="justify">Steam succeeded where others failed, like Games for Windows, making its services attractive for many devs, globally. The buzz was so loud that now companies like Apple and MSFT have their own stores like the <a href="http://www.apple.com/es/osx/apps/app-store.html"><font color="#5b739c">Mac App Store</font></a> and the <a href="http://www.windowsstore.com/the-opportunity"><font color="#5b739c">Windows Store</font></a>.</p> <p align="justify">Valve’s next move? The <a href="http://www.theverge.com/2013/2/6/3958162/valve-steam-box-cake"><font color="#5b739c">Steam Box</font></a> console … “Piston” …</p> <p align="justify"><strong>4. <u>Secret Wars</u>:</strong> imvho consoles as we know them are closer to get obsolete. Why? With current and potential customers buying more and more smart mobile devices over consoles, conditions are changing towards mobility.</p> <p align="justify">As a matter of fact, there is a secret war going on right now among console makers to turn the experience of using a console into a whole multimedia one. Games, movies, music, applications, Internet, and whatever it fits the Cloud-Computing agenda, will be included in consoles.</p> <p align="justify">But it doesn’t stop there … you will be also able to carry that experience with with you on your mobile smart devices. UserId synchronization over the Cloud plays a huge role here. Say that you were playing some game on your console but have to leave, don’t worry, you will be able to continue playing that exact game on your smart phone on the subway without having to start a new match; just resume it and presto! Ditto for movies, music play lists, etc..</p> <p align="justify">Now, you could be asking what indies have to do with this. And the answer is simple, despite their budgets, small companies can react faster to changes in the environment; ymmv, but the larger the payroll and the infrastructure to sustain, the slower a company takes action to accommodate to new conditions on the market, since decisions on a big company usually involves many people on many levels of the organogram.</p> <p align="justify">For each new device, indies would be most likely willing to take a chance. Big companies, unless an exclusivity contract is on the table or at least an exposure/marketing deal, they would wait to see what happens with the device (take the PS Vita for example).</p> <p align="justify"><strong>5. <u>Ohhh Yea!</u>:</strong> thanks to a surprising campaign on Kickstarter the new upcoming console “Ouya” is about to join the market.</p> <p align="justify">The console will target indies, but this doesn’t mean that you will be able to publish videogames without <a href="http://www.joystiq.com/2013/02/08/ouya-game-approval-process-to-begin-this-month/"><font color="#5b739c">an approval process</font></a>.</p> <p align="justify">It’s very soon to foresee the fate of this Android-based console, but if Ouya succeeds, it will put a lot of pressure over traditional console makers, and who knows, all end up being quite positive for indies in the middle run.</p> <p align="justify"><strong>So what can traditional console makers do to avoid oblivion?</strong></p> <p align="justify">For starters, traditional console makers must realize that profit is more and more associated to service-based models and less to classic business activities like setting high initial price tags for new consoles.</p> <p align="justify">In this sense, the current monolithic model where dev companies are requested to buy special hardware for production and SDKs, pay high upfront fees, and crazy amounts of money for the QA of updates and patches, could rapidly become a huge stone on the console makers’ shoes.</p> <p align="justify">The more number of games a console gets, the more the makers earn. Plus, they also get a profit from an annual small subscription charged to devs per platform. So the more devs a platform gets, the more profit the platform gets from subscriptions.</p> <p align="justify">The beauty of this equation, is that the console maker always gets a profit from the games you sell and the subscription you pay, even if the game fails on popularity (and you don’t get money out of it). Multiply this income by a large amount of subscriptions and published games and you will have a winning strategy.</p> <p align="justify">Make no mistakes here, this doesn’t mean that games shouldn’t be verified nor authorized before publication, but let the market itself do the ultimate quality-check on published games.</p> <p align="justify">Now, there is an additional key issue to solve in order to assure a critical mass of devs and games. Both, indies and pros should be able to access all official services available for the platform with no distinction. As I mentioned before, on iOS devs can integrate leaderboards, achievements, social interaction, to mention just a few regardless their status as indies or pros.</p> <p align="justify">Last but not least, implementing a proper videogame-exposure built-in system cannot be neglected on each platform. Usually, big companies can run ambitious/aggressive marketing campaigns, so they will likely get a spot on featured areas of the stores. So a way to attract indies is to expose their games as if they were made by pros. The 360’s XBLIG channel is THE example of what NOT to do!</p> <p align="justify"><strong>To wrap it up …</strong></p> <p align="justify">The videogame market as a whole has changed big time in recent years. Smart devices introduced new challenges to both, PC and console makers. And thus, to stay in the game one may expect a strategy leap in the middle run on traditional consoles. Or else, these consoles may face an important drop in sells in comparison to previous editions.</p> <p align="justify">How open a console may be deemed will therefore depend on, or if you prefer, will be directly proportional to the less barriers imposed on indies.</p> <p align="justify">Let’s hope that both the PS4 and the XBox 720 consoles get <u>really</u> open to indies this time, by offering an attractive business model, <u>worldwide</u>.</p> <p>Cheers! <br />~Pete</p> Ultraheadhttp://www.blogger.com/profile/07831144482704209713noreply@blogger.com0tag:blogger.com,1999:blog-34025596.post-78437026328820566022013-02-20T23:38:00.001-02:002013-02-20T23:41:12.359-02:00FLYBOARD: A WATER VERSION OF IRONMAN’S PROPULSORS?<p>Guys, when I watch a gadget like this:</p> <div style="padding-bottom: 0px; padding-left: 0px; width: 448px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:8c8b616f-d283-4a8a-8ffb-5838ccf61ac5" class="wlWriterEditableSmartContent"><div><object width="448" height="252"><param name="movie" value="http://www.youtube.com/v/RahsRDQpa1E?hl=en&hd=1"></param><embed src="http://www.youtube.com/v/RahsRDQpa1E?hl=en&hd=1" type="application/x-shockwave-flash" width="448" height="252"></embed></object></div></div> <p>I cannot help to associate it with Ironman’s propulsors:</p> <div style="padding-bottom: 0px; padding-left: 0px; width: 448px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:473d5e0f-fcde-4c6b-8999-6a9b1f0d9ea9" class="wlWriterEditableSmartContent"><div><object width="448" height="252"><param name="movie" value="http://www.youtube.com/v/bwzuMk8SRzY?hl=en&hd=1"></param><embed src="http://www.youtube.com/v/bwzuMk8SRzY?hl=en&hd=1" type="application/x-shockwave-flash" width="448" height="252"></embed></object></div></div> <p>Next time I visit <a href="https://www.google.com.uy/search?q=punta+del+este&hl=es&tbm=isch&tbo=u&source=univ&sa=X&ei=zXolUdHSE5DW9ASfo4DYBA&ved=0CFsQsAQ&biw=1280&bih=699">Punta del Este</a> I will try this sport for sure!</p> <p>Best, <br />~Pete</p> Ultraheadhttp://www.blogger.com/profile/07831144482704209713noreply@blogger.com0tag:blogger.com,1999:blog-34025596.post-64750409837221453512013-02-15T00:35:00.001-02:002014-01-13T18:08:36.912-02:00THE FATE OF XNA … NOW WHAT?<p align="justify">Lately there has been lots of speculation and comments on the Web regarding the fate of XNA as a result <a href="http://ventspace.wordpress.com/2013/01/30/directxxna-phase-out-continues/"><font color="#5b739c">of these blog-posts</font></a>.</p> <p align="justify">Due to technical difficulties with my main system I am arriving late at the party; many <a href="https://www.google.com.uy/search?q=xna+is+dead&aq=f&oq=xna+is+dead#q=xna+is+dead&tbo=d&tbs=qdr:m&sa=X&ei=wygdUcyPOZLC9gSC3ID4Dw&ved=0CB4QpwUoBA&bav=on.2,or.r_gc.r_pw.r_cp.r_qf.&bvm=bv.42452523,d.eWU&fp=d57992cc825a60de&biw=1280&bih=699"><font color="#5b739c">articles</font></a> and <a href="https://twitter.com/search?q=%23becauseofxna"><font color="#6699cc">tweets</font></a> are out now, but anyway, I will give my view on the subject.</p> <p align="justify">For me, the phase-out process that MSFT has been carrying out silently for, what, a couple of years, a year and a half, a year, <include your estimate here>, <u>is not precisely a surprise</u>. In fact, I stopped working in all projects based on XNA tech during late 2010 because something was troubling me.</p> <p align="justify">At that time, I was an XNA/DX MVP creating my game engine, replacing XNA’s Content Manager with my own version of it, developing a videogame, to mention just a few, but for some reason I was holding myself back before starting a game-dev business based on XNA tech.</p> <p align="justify">The hunches -based on facts- that supported my decision back then,  in hindsight now prove me right on my wait. Of course it is important to note here that this worked for me; in other words, YMMV.</p> <p align="justify"><strong>1. HUNCHES AND WARNING SIGNALS</strong></p> <p align="justify">Let’s see, in no particular order, these are the hunches that caught my attention:</p> <ul> <li> <div><u>Comuniqués started to slow down</u>: these were a great read on the XNA Team blog, but suddenly, they started to fade out.</div> </li> <li><u>Our Community Manager moved to another division</u>: we all remember her xxoo’s at the end of her messages and posts. That <a href="http://blogs.msdn.com/b/xna/archive/2010/09/17/goodbye-girl.aspx"><font color="#5b739c">unexpected departure</font></a> was the first warning signal to me. </li> <li><u>XNA 4 was gradually presented as a “mature” product</u>: or expressed in a different way, XNA was not likely to receive (major) updates. Maybe this one was very difficult to gather at that time, but for me it was the second warning signal. </li> <li><u>Lack of strong support for XBLIG</u>: how many times community members (and even MVPs) claimed for proper marketing, fast opening of new markets, and or even a decent location on the Dashboard? In practice, MSFT turned out to be reluctant, so third warning signal. </li> <li><u>Lack of XBox Live services for XBLIG</u>: in addition to the previous one, how many times community members claimed for Leaderboards, Achievements, DLC, and so on so forth? Do you guys at MSFT really expect that games with no global leaderboards survive the increasing demands from gamers? </li> <li><u>Communication of Future Moves to MVPs</u>: in the past, before entering a new dev phase, the Team used to involve XNA/DX MVPs on design decisions. Maybe for many readers this is not relevant, but from and MVP’s perspective that to some extent used to be involved in the roadmap, being asked “what do you guys think of …?” a few days before going public, is a warning signal. Fourth one, indeed. </li> <li><u>The format of .xnb files was published to the world</u>: <a href="http://blogs.msdn.com/b/shawnhar/archive/2011/07/07/xnb-file-format-documentation.aspx"><font color="#5b739c">this one</font></a> might have been handy to me if published a couple of years earlier, but combined with the one below, gives -more than an indication- a confirmation that MSFT was silently phasing out XNA. Fifth warning signal. </li> <li><u>Gradual relocation of all members of the XNA Team:</u> when you saw one one of the most important programmers on the Team <a href="http://blogs.msdn.com/b/shawnhar/archive/2011/12/13/from-games-to-telephones.aspx"><font color="#5b739c">go to a different division</font></a> on MSFT, and no one is relocated or hired to take its place for further development of XNA, (please be honest here) did you really think that everything was ok? Sixth warning signal. A major one, if you ask me. </li> <li><u>Unattended suggestion on Connect</u>: after the database clean-up the XNA Team did on its Connect’s page, suggestions were marked more and more as “Active”, “Postponed”, “By Design” and “Won’t be fixed”. Seventh warning signal. </li> <li><u>DirectX SDK will not be updated any longer as such</u>: let us clarify this point: the DirectX SDK was integrated into the <a href="http://blogs.msdn.com/b/chuckw/archive/2012/03/22/where-is-the-directx-sdk.aspx"><font color="#5b739c">Win8 SDK</font></a> for the newest version of DX. What happened with the SDK for DX9.0c? Eighth warning signal. </li> <li><u>No XNA 4 for Windows 8 RT</u>: this is a technicality but, given that DirectX 9.0c does not get along with ARM processors, unless XNA gets a redesign based on DX 11.1, it gets pushed out of the picture for <a href="http://stackoverflow.com/questions/13856240/does-xna-apps-run-on-windows-rt"><font color="#5b739c">Surface (ARM-based) tablets</font></a>. Since the XNA Team has been erased, <u>unless a new official product comes unexpectedly out of the shadows for .NET</u>, hoping for an official rope is kinda naive. Ninth warning signal.  </li> <li><u>XNA does not support WinPhone8, or does it?</u>: after all the worries, talks and efforts to provide safe environments, MSFT does radically change by allowing the execution of custom native code on the new Window Phone 8 devices. This sounded like heaven for XNA’ers until MSFT announced that <a href="http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj207003(v=vs.105).aspx"><font color="#5b739c">XNA wouldn't add support for WinPhone8</font></a>. Games created with XNA for WP7 still run on WP8 devices, but they will not be able to get advantage of unsafe operations for the device. Tenth warning signal. </li> <li><u>XNA is not integrated into VS2012</u>: as a corollary of the point above, <a href="http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/6ce81c66-f87d-4a82-9ff6-e2c20070b5cc/"><font color="#5b739c">XNA was not integrated into VS2012</font></a>, what in turn means that if you need to use the content pipeline, you will need to install VS2010 side-by-side with VS2012. I don’t know, eleventh? </li> <li><u>No MVP award for XNA/DirectX</u>: I can understand the decision for XNA given that it has been and still is being phased out, but why must <a href="http://ventspace.wordpress.com/2013/01/31/follow-up-on-directxxna/"><font color="#5b739c">the award for DirectX</font></a> be also doomed? Despite the fact that the SDK is now part of the Win8 SDK, imho it is still a separated kind of expertise that cannot be merged with other areas. Final warning signal = confirmation. </li> </ul> <p align="justify">As a former XNA/DX MVP as well as an old timer using MSFT’s technology, let me say that lately it has been really difficult to recommend the use of XNA to create games professionally given the facts above.</p> <p align="justify">What can you say to devs when they ask questions like: “Can I use XNA for Windows RT?”, “Will XNA be integrated into VS2012?” or “Will XNA support DX11?”? Ditto for the question below …</p> <p align="justify"><strong>2. WILL THERE BE A NEW OFFICIAL SOLUTION FOR .NET?</strong></p> <p align="justify">It is very difficult to foresee what’s coming next in terms of .NET and game development given the difficulties one may find when trying to deduce what the heck TPTB at MSFT are currently thinking/doing.</p> <p align="justify">But let us see, to update XNA (or replace it) MSFT may consider that …:</p> <ul> <li> <div align="justify">… there is a novelty around “Going Native” with C++11 inside MSFT itself.</div> </li> <li> <div align="justify">… to support ARM processors, the new tech needs to be built on top of DX11 APIs (which supports “legacy” cards by only enabling the subset of allowed features for the card).</div> </li> <li> <div align="justify">… XNA is neither a pure DX9-wrapper nor a game engine, making it difficult to justify its maintenance.</div> </li> <li> <div align="justify">…  the dream of “develop once, deploy to the three screens” vanished given that not all the features supported on the PC were supported on the 360 and the WP7 platforms. Plus, the screens are changing: WP8, Surface, XBox.Next, ...</div> </li> <li> <div align="justify">… due to the managed design of XNA, and in spite of some indie impressive efforts (like <a href="http://www.synapsegaming.com/"><font color="#5b739c">this one</font></a> and also <a href="http://farseerphysics.codeplex.com/"><font color="#5b739c">this one</font></a>), XNA lacked middleware support of big fishes in the Industry.</div> </li> <li> <div align="justify">… there was never a world/level editor. XNA is VS centric, so how can it compete with editor-centric solutions like <a href="http://unity3d.com/"><font color="#5b739c">Unity3D</font></a> or <a href="http://www.unrealengine.com/"><font color="#5b739c">UDK</font></a>?</div> </li> <li> <div align="justify">… last but not least, XBLIG failed as a business line an new lead marketplaces for indies emerge (Win8, WP8). Period.</div> </li> </ul> <p align="justify">So, to answer the original question, with C++ regaining position inside MSFT and being DX11.1 mandatory for latest platforms, why bother? Which leads us to the next question …</p> <p align="justify"><strong>3. WHAT CAN “XNA’ers” DO NOW?</strong></p> <p align="justify">You feel disappointed. MSFT let you down (for some, again). You cannot find the exit from this nightmare. And you do not want to learn or get back to C++.</p> <p align="justify">If that is your case, then, do not panic! Right now, there are many alternatives out there for you to consider, specially if you like or love C#:</p> <p align="justify"><u>1. SharpDX</u>: created by <a href="http://sharpdx.org/"><font color="#5b739c">Alex Mutel</font></a> -as an alternative to <a href="http://slimdx.org/"><font color="#5b739c">SlimDX</font></a>, this pure wrapper of DirectX (from DX 9.0c to DX 11.1, both included) has positioned as the lead solution for advanced user who want to program DX games on top of the lowest level available to C#.</p> <p align="justify">Although this set of APIs is open source, it is consumed by many of <a href="http://sharpdx.org/about/related"><font color="#5b739c">the solutions</font></a> that will be listed next. What is more, games for Win8 from MSFT Studios (through partners like <a href="http://www.arkadium.com/"><font color="#5b739c">Arkadium</font></a>) have been developed using SharpDX (i.e.: <a href="http://www.arkadium.com/Games/windows8/microsoft-minesweeper"><font color="#5b739c">minesweeper</font></a>, <a href="http://www.arkadium.com/Games/windows8/microsoft-solitaire-collection"><font color="#5b739c">solitaire</font></a>, and <a href="http://www.arkadium.com/Games/windows8/microsoft-mahjong"><font color="#5b739c">mahjong</font></a>).</p> <p align="justify">Alex has been also developing a Toolkit to ease development of common tasks (sound familiar?), which for sure extends a bridge to those of us coming from XNA.</p> <p align="justify"><u>2. Monogame</u>: the open source sibling of XNA. Fueled by SharpDX for all latest Windows-based platforms. Multiplatform not only for Windows, thanks to <a href="http://xamarin.com/"><font color="#6699cc">Mono</font></a>.</p> <p align="justify">With few-to-none modifications to the source code of your XNA creations, you can port your games to a wide variety of platforms.</p> <p align="justify">This open source solution has recently reached its third stable version, adding many requested features, like 3D support.</p> <p align="justify">Although it lacks a content pipeline replacement, which is currently <a href="http://www.monogame.net/news/2013/01/31/cross-platform-content-pipeline-preview"><font color="#5b739c">under development</font></a>, it can be used from VS 2010 and VS 2012.</p> <p align="justify">Many well-known games have been created with Monogame (or adaptations of it) like: <a href="http://supergiantgames.com/"><font color="#5b739c">Bastion</font></a>, <a href="http://www.armedgame.com/"><font color="#6699cc">Armed!</font></a>, <a href="http://www.monogame.net/showcase"><font color="#5b739c">among others</font></a>.</p> <p align="justify">Last but not least, the community is growing strong around Monogame. As a matter of fact, if you like “the XNA-way”  then this is your perfect choice.</p> <p align="justify"><u>3. ANX</u>: <a href="http://anxframework.codeplex.com/"><font color="#6699cc">a competitor</font></a> to Monogame. Its name, in case you did not notice, is XNA reversed. Recently, after a long wait, v0.5_beta has been published.</p> <p align="justify">Not many games have been created with this solution yet and its community is rather small –in comparison with Monogame’s, but definitely its progress is worth following closely. </p> <p align="justify"><u>4. Paradox</u>: I really do not know how Alex does to find some time left, but he is also developing <a href="http://paradox3d.net/"><font color="#5b739c">a multiplatform game-dev solution</font></a> for .NET with a data-driven editor!</p> <p align="justify">Of course that the Window-targeted portion of Paradox is based on SharpDX, but the engine will also offer deployment to other platforms based on OpenGL.</p> <p align="justify">No prices or release updates have been disclosed yet, but having read the features, watched images and <a href="http://www.youtube.com/watch?v=5gHKp9t4lms"><font color="#5b739c">demo videos</font></a>, it is by far a very serious alternative to consider.</p> <p align="justify"><u>5. DeltaEngine</u>: the lead dev of <a href="http://deltaengine.net/"><font color="#5b739c">this multiplatform solution</font></a> is the first XNA MVP that <a href="http://www.amazon.com/Professional-XNA-Programming-Building-Windows/dp/B005GNMGDA"><font color="#5b739c">wrote a book</font></a> about XNA.</p> <p align="justify">Coding by using this solution resembles coding with XNA. It has its own multiplatform content pipeline which optimizes output per platform, among other tools. And games like <a href="http://deltaengine.net/Start/Soulcraft"><font color="#5b739c">Soulcraft</font></a> show off the power of the solution.</p> <p align="justify">You can check the pricing <a href="http://deltaengine.net/Pricing"><font color="#5b739c">here</font></a>. </p> <p align="justify"><u>6. Axiom</u>: being a former user of this solution before the time of XNA, I am very pleased to see that the project has revived.</p> <p align="justify">Axiom is now a multiplatform solution for .NET based on the popular OGRE graphic engine, which also consumes SharpDX for Windows targets.</p> <p align="justify">Honestly, I do not know whether there are games created (and published) with this solution, but I hope there will eventually be sooner than later.</p> <p align="justify"><u>7. WaveEngine</u>: Vicente Cartas (MVP for XNA/DX) has just let me know about <a href="http://waveengine.net/">this cross-platform engine</a>, which will be released as a beta in less than a day ahead (thanks for the tip!).</p> <p align="justify">Oriented towards the mobile-dev market, the engine is a result of a two-year effort of the Wave Engine team. Knowing past work of Vicente on JadEngine, I cannot wait to watch some cool demo videos <a href="http://www.youtube.com/user/WaveEngineChannel/videos?view=0">here</a> (like <a href="http://www.youtube.com/watch?v=8adBoxzdmXM">Bye Bye Brain</a>).</p> <p align="justify">Best of all, the engine is completely free, so it is with no doubt worth trying as soon as it gets released!</p> <p align="justify"><u>8. Unity3D</u>: I cannot forget to mention Unity3D since it started almost at the same time that XNA did, however, adoption among devs grew exponentially on later years because of a combo of factors: a robust editor, multiplatform support, increasing number of appealing features, and <a href="http://unity3d.com/gallery/"><font color="#5b739c">a variety</font></a> of well-known success stories among indies (for instance, <a href="http://www.madfingergames.com/g_shadowgun.html"><font color="#5b739c">ShadowGun</font></a>).</p> <p align="justify">Make no mistake here, the experience of using Unity3D is quite different from XNA’s: its editor-centric, coding -either in C#, Javascript or Boo- serves as scripts, sometimes you need to broadcast messages -as opposed to an OOP rationale, and last but not least, 2D programming is not straightforward (not even on the latest version; you need to buy one of the available plugins as a workaround).</p> <p align="justify">You can check the pricing <a href="https://store.unity3d.com/"><font color="#6699cc">here</font></a>.-</p> <p align="justify">As you can see, even if no official solution will replace XNA, its spirit remains in many of its successors, all of which support latest DX11 HW. </p> <p align="justify">So imho as a dev, there is no need to worry. Your knowledge is still valid for the above-mentioned alternatives.</p> <p align="justify"><strong>4. OK, BUT WHAT ABOUT MSFT?</strong></p> <p align="justify">Well, imho it would be deemed as positive by XNA’ers (and indies in general) if MSFT …:</p> <ul> <li> <div align="justify">… does not try to impose C++ as the only language to develop quality games.</div> </li> <li> <div align="justify">… develops <a href="http://channel9.msdn.com/Forums/Coffeehouse/MS-working-on-a-same-compiler-for-C-AND-C--Not-in-incubation-but-for-production-"><font color="#5b739c">a common compiler</font></a> for C++/C#, for all supported platforms.</div> </li> <li> <div align="justify">… implements SIMD ops for .NET (<a href="https://connect.microsoft.com/VisualStudio/feedback/details/778895/add-builtin-simd-support-for-net"><font color="#5b739c">please vote for it</font></a>).</div> </li> <li> <div align="justify">… reduces differences for .NET among the latest “screens”.</div> </li> <li> <div align="justify">… supports open efforts like <a href="https://connect.microsoft.com/VisualStudio/feedback/details/777333/add-dllimport-support-for-net-in-windows-phone-8"><font color="#5b739c">SharpDX</font></a> and Monogame (<a href="https://twitter.com/mrhelmut/status/301652094560112640"><font color="#5b739c">it seems</font></a> it will).</div> </li> <li> <div align="justify">… publishes as open source the source code of XNA that does not implies a security risk or bring any potential legal issues to the table (like say, the content pipeline).</div> </li> <li> <div align="justify">… reduces barriers for indies (like say, the access to XBox Live services) for the upcoming XBox.Next so as to compete with other platforms like Ouya, iOS, Steam and so on so forth.</div> </li> <li> <div align="justify">… and continues to support indies through initiatives like the <a href="http://www.dreambuildplay.com"><font color="#5b739c">Dream.Build.Play</font></a> compo.</div> </li> </ul> <p align="justify">Personally, I do not care the language or solution a dev picks to develop a game provided it is the right language or solution for the project. In this sense, this “Going Native” campaign that some people at MSFT may seem to support by stressing perf differences among C++ and C# whenever they can, is imho unnecessary given the fact that there are many successful indie games out there developed with managed code.</p> <p align="justify">Plus, as a former C++ dev, I do not want to get back to C++ because I feel really confortable with C#. If sometime in the future I had to go to a lower level language I would prefer “<a href="http://dlang.org/"><font color="#6699cc">D</font></a>”.</p> <p align="justify">Thus, I hope MSFT creates a common compiler for C++/C# which in turn will help us turn the use of hybrid solutions into a common scenario for indies.</p> <p align="justify"><strong>5. TO WRAP IT UP …</strong></p> <p align="justify">Without starting a nonsense discussion for a Pyrrhic Victory, imho the fate of XNA was predictable if you took a careful look at announcements from MSFT, whether you deemed them as facts or mere hunches.</p> <p align="justify">But one thing remains strong for sure: XNA’s spirit. </p> <p align="justify">Thanks to solutions like SharpDX and Monogame one can still talk about C# and XNA-based coding as a valid option for a game-dev business.</p> <p align="justify">Cheers <a href="https://twitter.com/search?q=%23becauseofxna"><font color="#6699cc">#becauseofxna</font></a>! <br />~Pete</p> Ultraheadhttp://www.blogger.com/profile/07831144482704209713noreply@blogger.com6tag:blogger.com,1999:blog-34025596.post-42847648241013236472012-12-04T09:39:00.001-02:002012-12-04T10:07:10.636-02:00GREAT ARTICLE ABOUT C++<p align="justify">Today I happened to find a very interesting article about C++ on the Internet, entitled “<a href="http://simpleprogrammer.com/2012/12/01/why-c-is-not-back/"><font color="#809ec2">Why C++ Is Not Back</font></a>”.</p> <p align="justify">The article is written by John Sonmez, a native coder, who “embraced the dark side” and gave C# and XNA a try.</p> <p align="justify">Please read his article. It is worth reading every paragraph. All I will say about it is that I agree with him. What is more, imho, if C++ were replaced by D, we would all be currently using D.</p> <p align="justify">On a side note, C# is indeed a great language, and once it gets <a href="http://channel9.msdn.com/Forums/Coffeehouse/MS-working-on-a-same-compiler-for-C-AND-C--Not-in-incubation-but-for-production-"><font color="#5b739c">a proper native compiler</font></a> –and not a tool created to only improve startup times- it will rock.</p> <p>Cheers! <br />~Pete</p> Ultraheadhttp://www.blogger.com/profile/07831144482704209713noreply@blogger.com0tag:blogger.com,1999:blog-34025596.post-10823712096983763792012-09-28T10:36:00.001-03:002012-09-28T10:37:02.365-03:00RAZER’S LATEST LINE OF PRODUCTS<p align="justify">On a year of trends to go mobile with a variety of offers to pick from, I must admit that I get sometimes amazed with alternatives that reinforce the desktop world.</p> <p align="justify">One of these alternatives is <a href="http://www.razerzone.com/gaming-keyboards-keypads/razer-deathstalker-ultimate"><font color="#5b739c">this keyboard</font></a> by Razor:</p> <p align="justify"><a href="http://www.razerzone.com/gaming-keyboards-keypads/razer-deathstalker-ultimate"><img style="display: block; float: none; margin-left: auto; margin-right: auto" src="http://assets.razerzone.com/eeimages/products/769/razer-deathstalker-ultimate-gallery-1__store_gallery.png" /></a></p> <p>Man, I love the design and the concept. Some specs:</p> <ul> <li><font face="Arial">4.05” touch screen able to run widget apps.</font></li> <li><font face="Arial">Track pad with gesture support.</font></li> <li><font face="Arial">10 dynamic display keys with 80hz response time.</font></li> <li><font face="Arial">Chiclet style key caps.</font></li> <li><font face="Arial">Tri-colour backlit keys.</font></li> <li><font face="Arial">1000Hz Ultrapolling.</font></li> <li><font face="Arial">Fully programmable keys with on the fly macro recording.</font></li> <li><font face="Arial">Razer Synapse 2.0 enabled.</font></li> <li><font face="Arial">Dedicated Gaming mode.</font></li> <li><font face="Arial">5 additional macro keys.</font></li> <li><font face="Arial">Anti-ghosting capability for up to 10 simultaneous key presses.</font></li> <li><font face="Arial">Braided fiber cable.</font></li> <li><font face="Arial">Fixed wrist rest.</font></li> <li><font face="Arial">PC with USB port.</font></li> <li><font face="Arial">Windows 7 / Windows Vista / Windows XP.</font></li> </ul> <p align="justify">This is really a nice, handy and interesting product. If only it supports the upcoming Windows 8 and Surface tablets it would far from perfect.</p> <p align="justify">The only drawback, like in any top-notch product long before it becomes standard, is its initial retail price -currently at U$S 249.99- which may result prohibitive for many.</p> <p align="justify">I would love to see future editions of this keyboard where all its keys get dynamic-displayed.</p> <p align="justify">As a side note to desktops, another nice product to mention are <a href="http://www.razerzone.com/store/choose/razer-blade?utm_source=RazerStore&utm_campaign=blader2&utm_medium=rsfp_mainban_us#"><font color="#5b739c">Razor’s Blade notebooks</font></a>, which integrate the above-mentioned keyboard solution, flawlessly.</p> <p align="justify"><img style="display: block; float: none; margin-left: auto; margin-right: auto" src="http://www.razerzone.com/?ACT=27&fid=58&d=757&f=blade_main_cat_image.png" width="412" height="248" /></p> <p align="justify">Again, everything goes well until you see the prices, which start beyond U$S 2 thd., without VAT and shipping costs.</p> <p align="justify">I cannot wait to see what Razor will come up with next; don’t you? Not to mention to get one of these, if I ever get to afford buying one.</p> <p align="justify">Cheers! <br />~Pete</p> Ultraheadhttp://www.blogger.com/profile/07831144482704209713noreply@blogger.com0tag:blogger.com,1999:blog-34025596.post-4319938485250882752012-09-13T04:58:00.001-03:002012-09-13T05:10:36.073-03:00NO MORE GAME DISCS, PLEASE !!!<p align="justify">Today, <a href="http://kotaku.com/5942868/all-of-japans-big-wii-u-launch-details-right-here">prices and availability dates</a> have been unveiled for the upcoming Wii U console.</p> <p align="justify">Among its specs it is mentioned that game discs for this console will have a 25GB capacity while the internal HDD storage will be either 8GB or 32GB.</p> <p align="justify">I don’t know whether you think the same, but I believe it is time for the game industry to move away from CDs and DVDs.</p> <p align="justify">In spite of the improvements some consoles have introduced in order to avoid scratches (like the XBox 360), it’s really annoying and frustrating when a game disc gets eventually scratched on a relevant area for the game to properly run.</p> <p align="justify">So, as we wait for a full switch to the Cloud nirvana, why not replacing discs by other hardware like flash drives? Nowadays, a memory stick can have large capacities.</p> <p align="justify">I’m not talking here of empty flash drives that you can buy to then plug it into the console to save downloadable games, but drives already prepared and commercialized by publishers containing the game.</p> <p align="justify">Imagine a flash drive with one read-only memory area (where the first version of the game is stored) and a protected memory area for patches (I will leave game content out of this picture, for now). It would be like going back to the cartridge era with a modern twist.</p> <p align="justify">Smaller box-art and more portability for games not commercialized through the Cloud are some of the additional benefits.</p> <p align="justify">So let’s hope devs of next-gen consoles -like the XBox 720- embrace this thought …</p> <p align="justify">Cheers! <br />~Pete</p> <p align="justify">[Btw, this could be also applied on laptops, notebooks, ultrabooks and so on so forth]</p> Ultraheadhttp://www.blogger.com/profile/07831144482704209713noreply@blogger.com0tag:blogger.com,1999:blog-34025596.post-15705233265140219852012-09-04T11:06:00.001-03:002012-09-04T11:09:24.069-03:00DBP 2012: WINNERS ANNOUNCED<p align="justify">Microsoft has published the list of winners for this year’s Dream.Build.Play contest.</p> <p>Winners for the XBox360 console:</p> <p><a href="https://www.dreambuildplay.com/main/winners.aspx#winnersXbox-tab"><font color="#6699cc">https://www.dreambuildplay.com/main/winners.aspx#winnersXbox-tab</font></a></p> <p><a href="https://www.dreambuildplay.com/main/winners.aspx#winnersXbox-tab"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" border="0" src="https://www.dreambuildplay.com/images/2012/xbox_onefingerdeathpunch1.jpg" width="434" height="246" /></a></p> <p>Winners for the WinPhone device:</p> <p><a href="https://www.dreambuildplay.com/main/winners.aspx#winnersWinphone-tab"><font color="#6699cc">https://www.dreambuildplay.com/main/winners.aspx#winnersWinphone-tab</font></a></p> <p><a href="https://www.dreambuildplay.com/main/winners.aspx#winnersWinphone-tab"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" border="0" src="https://www.dreambuildplay.com/images/2012/winphone_smirkers1.jpg" width="434" height="246" /></a></p> <p>Congrats to all winners!</p> <p>Cheers! <br />~Pete</p> Ultraheadhttp://www.blogger.com/profile/07831144482704209713noreply@blogger.com0tag:blogger.com,1999:blog-34025596.post-32243957917731988292012-08-23T13:09:00.001-03:002012-08-23T13:29:16.799-03:00INTERVIEWING DEAN DODRILL, CREATOR OF “DUST: AN ELYSIAN TAIL”<p align="justify">What’s the dream of game developers like myself? To get an opportunity, even the slightest one, to publish your own game title on the big leagues. That game that you always dream of creating from scratch. Your masterpiece. Your 9th Symphony …</p> <p align="justify">Some of us, generally “indies”, even dear dream of watching that game become a success once it goes gold. The kind of success that allows us to officially become part of the Industry from that moment and on with a critical mass of loyal gamers waiting for our next tiles with sincere smiles of joy on their faces.</p> <p align="justify">For Dean Dodrill, creator of the acclaimed game entitled “<a href="http://marketplace.xbox.com/Product/Dust-An-Elysian-Tail/66acd000-77fe-1000-9115-d80258410a67"><font color="#5b739c">Dust: An Elysian Tail</font></a>”, the dream has become a reality.</p> <p align="justify">For those of you who still don’t know, Dean’s game (Dust: AET) was the grand-prize winner of the <a href="https://www.dreambuildplay.com"><font color="#5b739c">Dream.Build.Play</font></a> contest held back in 2009. Recently, the game went gold on the Live Arcade marketplace  for the XBox 360 console (“XBLA”), as a part of the <a href="http://majornelson.com/2012/06/19/summer-of-arcade-dates-and-prices-2/"><font color="#5b739c">Summer of Arcade 2012</font></a> promotion (“SoA”).</p> <p align="justify">As soon as the game got released, it received (and still does) lots of positive reviews, articles, kind words from buyers, a zizillion of <a href="http://twitter.com/NoogyTweet"><font color="#5b739c">tweets</font></a> and <a href="http://www.facebook.com/DustAnElysianTail"><font color="#5b739c">FB posts</font></a>, and ratings varying from 8.5 to a perfect-10 score. </p> <p align="justify">Most of them, like this interview with the guys of <a href="http://www.ign.com/videos/2012/08/16/borderlands-2-elysian-tail-and-remember-me-podcast-unlocked-episode-67"><font color="#6699cc">IGN’s  Podcast Unlocked</font></a> (which I recommend listening to), focus on the story behind the creation of the game and the game itself, from the perspective of gamers.</p> <p align="justify">So, since the game was fully developed with C# and XNA, being a strong supporter of both technologies for years, I decided to try luck and interview him from the perspective of an indie XNA'er. </p> <p align="justify">Well, … guess what? Dean kindly answered all of my questions, so be prepared to read his responses after watching the launch trailer of his game.</p> <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:89738ac2-0ef8-4eb9-a3fe-9fcbc86c0aa8" class="wlWriterEditableSmartContent"><div id="6f5ad7a2-865e-45a0-8a42-3cadb0cdbb44" style="margin: 0px; padding: 0px; display: inline;"><div><a href="http://www.youtube.com/watch?v=Cg81GcutanQ" target="_new"><img src="http://lh3.ggpht.com/-knJnzb9VWJc/UDZaW6UJ-CI/AAAAAAAAAPY/AUO18RNEj9E/video31b3bb555dfe%25255B5%25255D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('6f5ad7a2-865e-45a0-8a42-3cadb0cdbb44'); downlevelDiv.innerHTML = "<div><object width=\"448\" height=\"252\"><param name=\"movie\" value=\"http://www.youtube.com/v/Cg81GcutanQ?hl=en&hd=1\"><\/param><embed src=\"http://www.youtube.com/v/Cg81GcutanQ?hl=en&hd=1\" type=\"application/x-shockwave-flash\" width=\"448\" height=\"252\"><\/embed><\/object><\/div>";" alt=""></a></div></div></div> <p align="justify">Ok, we’re back. Before posting the interview I want to thank Dean publicly for accepting the interview and taking the time to answer all the questions.</p> <p align="justify">Now, enjoy the reading …</p> <hr /> <p align="justify"><strong>Q: Are sells going as you expected? I mean, I don’t want to know the figures; instead, I want to know whether they have reached a point where you can continue developing games professionally (you know, to continue living the dream) or not (= it contributes to make you family’s life better for a while but it is not enough to go beyond).</strong></p> <p align="justify">A: It’s a little early to determine how well sales are going, but I do believe the game will allow me to continue game development, at least at the scale I’m currently working on.</p> <p align="justify"><strong>Q: How was it like using the XNA framework –from and artist viewpoint, given your lack of programming experience? (I mean, pros and cons) Which features do you love for C#/XNA to have built-in (I mean, that lacking feature that forced you use a workaround or take a programming detour)?</strong></p> <p align="justify">A: Since I’ve never programmed with anything other than C#/XNA I can’t really compare it to other languages. I will say that I found it fairly easy to pick up, and since much of my code resulted in some sort of visual feedback in the game, iteration was fun. Garbage collection on the 360 was always a hassle, but I loved many XNA specific niceties, such as SpriteBatch and streamlined gamepad support. I also love XACT and how relatively easy it was to work with audio and effects. If I could help I would continue working with XNA exclusively.</p> <p align="justify"><strong>Q: Which features of the extended XNA APIs for Live Arcade did you use? Again, how was it like using them?</strong></p> <p align="justify">A: I did have to use the XNA extensions for XBLA, and admittedly most of that was a hassle. The biggest issue is that most of it is poorly documented, and there were always certification issues which were inherent of XNA. Integrating Leaderboards and Achievements was one of my least favorite parts of the process. I definitely got the feeling that XNA wasn’t created with XBLA in mind.</p> <p align="justify"><strong>Q: Given that you got a contract with MSFT, do you still own the IP rights of Dust: AET? Did you receive financial advantages, like not having to pay for (re)certification) and or dev/test kits? (if you can comment on it, of course)</strong> </p> <p align="justify">A: I do own the IP to Dust:AET, but of course have signed an exclusivity period with MS. MS helped with testing and localization, and assigned me an excellent producer who helped push the game through the system (as well as offered valuable design suggestions). It’s a mutually beneficial agreement, otherwise I can’t go too much into details.</p> <p align="justify"><strong>Q: Are you planning additions/extensions to the game? Say, now that you met the deadline for Summer of Arcade, you want to add that feature that stayed behind and would have loved to develop for the release by “unlocking some extra time”?</strong></p> <p align="justify">A: I haven’t given much thought to anything like DLC. Thankfully I didn’t have to cut anything to meet the SoA deadline, it was just a matter of compressing the schedule down and working VERY hard for a few months. Given more time I would have liked to polish a bit more, but that’s the curse of any project I’m sure. I do have plans for future games in this universe, but nothing to announce at this time.</p> <p align="justify"><strong>Q: Are you planning to port the game to other MSFT platforms like WinPhone8, Win8 and the Surface? (for instance, by using Monogame or ANX). </strong></p> <p align="justify">A: MS and I haven’t discussed anything outside of XBLA at this time. I was honestly so busy focusing on the XBLA release that I hadn’t considered a port. If anything pops up I’ll be sure to announce it, but XBLA remains my focus as of this writing.</p> <p align="justify"><strong>Q: Thanks in advance for reading, your response and for such a great XNA game which serves as a great inspiration for us, indies.</strong></p> <p align="justify">A: Thanks for the interview, Pete.</p> <p align="justify"></p> <hr /> <p><strong>Game Description:</strong></p> <p><font face="Arial">Immerse yourself in a gorgeous hand-painted world on a search for your true identity. As the mysterious warrior, Dust, your action-packed journey will take you from peaceful glades to snowy mountaintops and beyond. At your disposal is the mythical Blade of Ahrah, capable of turning its wielder it into an unstoppable force of nature, and the blade's diminutive guardian, Fidget.</font></p> <p><font face="Arial">Battle dozens of enemies at once with an easy-to-learn, difficult-to-master combat system, take on a variety of quests from friendly villagers, discover ancient secrets and powerful upgrades hidden throughout the massive, open world, and uncover the story of an ancient civilization on the brink of extinction as you fight to uncover your own past.</font></p> <ul> <li><font face="Arial">Take control of Dust, a warrior searching for his true purpose, as he joins forces with the mystical Blade of Ahrah and its guardian, Fidget, to save the world of Falana from an army unlike any before it!</font> </li> <li><font face="Arial">Explore an incredible hand-painted world!</font> </li> <li><font face="Arial">Match wits and weapons against challenging monsters!</font> </li> <li><font face="Arial">Take on side-quests from a cast of colorful, fully-voiced characters!</font> </li> <li><font face="Arial">Craft dozens of items and discover Falana's rarest treasures!</font> </li> <li><font face="Arial">Compete against your friends' high scores in ranked Challenge Arenas!</font> </li> </ul> <hr /> <p align="justify">Nice interview, don’t you think?</p> <p align="justify">Not only is the game fantastic but also it may help developers finally understand how powerful C# could be when coupled with a fine tech like XNA, <a href="http://amapplease.blogspot.com/2012/08/net-must-die-to-go-or-not-to-go-native.html"><font color="#6699cc">despite unavoidable performance differences with native bits</font></a>, when you use the tech right even as a one man band (like in Dean’s case).</p> <p align="justify">It’s a pity that many devs (pro and indie) still deem XNA as a tool for kids and hobbyist, only, and don’t give it an opportunity. And what is worse, it’s a shame that MSFT –at least for what is publicly known so far- <a href="http://blogs.msdn.com/b/astebner/archive/2012/08/15/10340334.aspx"><font color="#5b739c">won’t update it any longer</font></a> …</p> <p align="justify">To wrap it up, Dust: AET shows off a quite enjoyable gameplay, incredible art as well as the mechanics behind its 2D environment, like skeletal animations, particle systems, input combos, shaders, to mention just a few.</p> <p>So, what are you waiting for? Go and buy it now!</p> <p>Cheers! <br />~Pete</p> Ultraheadhttp://www.blogger.com/profile/07831144482704209713noreply@blogger.com0tag:blogger.com,1999:blog-34025596.post-791875636471415242012-08-22T11:15:00.001-03:002012-08-23T13:12:50.532-03:00DBP 2012: TOP 40 FINALISTS<p align="justify">The list of top-40 finalists for this year’s Dream.Build.Play contest has been published.</p> <p align="justify">Top-20 finalists for the XBox360 console:</p> <p align="justify"><a title="https://www.dreambuildplay.com/main/winners.aspx#winnersXbox-tab" href="https://www.dreambuildplay.com/main/winners.aspx#winnersXbox-tab"><font color="#6699cc">https://www.dreambuildplay.com/main/winners.aspx#winnersXbox-tab</font></a></p> <p align="justify">Top-20 finalists for the WinPhone device:</p> <p align="justify"><a title="https://www.dreambuildplay.com/main/winners.aspx#winnersWinphone-tab" href="https://www.dreambuildplay.com/main/winners.aspx#winnersWinphone-tab"><font color="#5b739c">https://www.dreambuildplay.com/main/winners.aspx#winnersWinphone-tab</font></a></p> <p align="justify">You can read on the page, the following:</p> <blockquote> <p align="justify">The games received for this year’s competition were phenomenal. </p> </blockquote> <p align="justify">It could be, but imvho, compared to previous years, and at least for the 360, there is no game that stands out that much this year visually like <a href="http://www.youtube.com/watch?v=02qs8Ptly0E"><font color="#5b739c">The Dishwasher: Dead Samurai</font></a>, <a href="http://www.youtube.com/watch?v=DmSAQwbbig8"><font color="#5b739c">Dust: AET</font></a>, among others, did in previous compos.</p> <p align="justify">I always wondered why <a href="http://www.youtube.com/watch?v=aik31yQTa5s"><font color="#5b739c">this game</font></a> was never awarded a prize on DBP 2011. If they had submitted the game again for this year’s compo, they would have run for the 1st place. Its gameplay video looks fantastic:</p> <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:76d97c44-5964-4ed2-8a1a-275a506337a7" class="wlWriterEditableSmartContent"><div id="dd85eff1-e2fc-498d-a5ce-64235b02c60c" style="margin: 0px; padding: 0px; display: inline;"><div><a href="http://www.youtube.com/watch?v=aik31yQTa5s" target="_new"><img src="http://lh3.ggpht.com/-y8MWdUAwPck/UDTplBf22cI/AAAAAAAAAPE/bdVp-uh2NNE/videocac4bcb30d2a%25255B6%25255D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('dd85eff1-e2fc-498d-a5ce-64235b02c60c'); downlevelDiv.innerHTML = "<div><object width=\"448\" height=\"252\"><param name=\"movie\" value=\"http://www.youtube.com/v/aik31yQTa5s?hl=en&hd=1\"><\/param><embed src=\"http://www.youtube.com/v/aik31yQTa5s?hl=en&hd=1\" type=\"application/x-shockwave-flash\" width=\"448\" height=\"252\"><\/embed><\/object><\/div>";" alt=""></a></div></div></div> <p align="justify">I hope MSFT eventually gives these guys a chance to get an XBLA-publishing contract even if they didn’t win or make it into the final round. </p> <p align="justify">Having said that, congrats to the finalists of DBP 2012!</p> <p align="justify">Cheers! <br />~Pete</p> Ultraheadhttp://www.blogger.com/profile/07831144482704209713noreply@blogger.com0tag:blogger.com,1999:blog-34025596.post-5892238395860307802012-08-13T13:00:00.001-03:002012-08-23T13:14:03.415-03:00.NET MUST DIE … TO GO OR NOT TO GO NATIVE …<p align="justify">… is that the question? … not really. </p> <p align="justify">From time to time I dare ask technical questions to experts in the fields of native+managed worlds so as to better understand the differences, performance-wise, between code originally written with a native language like C++ and “native images” of code written with a managed language like, as of today, C#.</p> <p align="justify">Due to the novelty around the resurge of C++ due to revision 11, in one of my latest Q&A adventures, I dared ask Alexandre Mutel about eventual penalties –if any, of calling a wrapped operation in C# once the assembly gets compiled ahead of time with NGen (or its Mono equivalent, AOT compilation). Like, say, the following:</p> <blockquote> <p align="left">[DllImport("SomeDLL.dll")] <br />public static extern int SomeOperation(int h, string c, ref SomeStruct rStruct, uint type);</p> </blockquote> <p align="justify">[For those of you that still don’t know him, Alexandre Mutel is the creator of, inter alia, <a href="http://sharpdx.org/"><font color="#5b739c">SharpDX</font></a>: “a free and active <a href="http://www.opensource.org/licenses/mit-license.php"><font color="#5b739c">open-source</font></a> project that is delivering a <a href="http://sharpdx.org/about/features"><font color="#5b739c">full-featured</font></a> Managed DirectX API”, which is currently leveraging the DirectX-side of projects like Monogame and ANX, among others; being imvho the perfect choice for those of us who don’t want to go back to C++ and once embraced the old ManagedDX solution that then was called off by MSFT in order to give birth to XNA a few months later].</p> <p align="justify">I won’t dare claim that Alexandre posted <a href="http://code4k.blogspot.com/2012/08/going-native-20-future-of-winrt.html"><font color="#5b739c">this impressive article</font></a> because of my email question (or my prior request of DirectMath support in SharpDX due to SIMD), but I must admit that it vanishes any doubt I might have had in the past in that regard and leads me to concur that .NET must die.</p> <p align="justify">In his article, Alexandre mentions an interesting detail, or fact if you’d mind, when speaking of a managed language:</p> <blockquote> <p align="justify">… the performance level is indeed below a well written C++ application …</p> </blockquote> <p align="justify">… and also that:</p> <blockquote> <p align="justify">… the meaning of the “native” word has slightly shifted to be strongly and implicitly coupled with the word “performance”.</p> </blockquote> <p align="justify">He also references two articles about the real benefits of better Jittering:</p> <ul> <li> <div align="justify"><a title="http://herbsutter.com/2012/04/02/reader-qa-when-will-better-jits-save-managed-code/" href="http://herbsutter.com/2012/04/02/reader-qa-when-will-better-jits-save-managed-code/"><font color="#5b739c">When will better JITs save managed code?</font></a> –by Herb Sutter, and</div> </li> <li> <div align="justify"><a title="http://tirania.org/blog/archive/2012/Apr-04.html" href="http://tirania.org/blog/archive/2012/Apr-04.html"><font color="#5b739c">Can JITs be faster?</font></a> –by Miguel de Icaza.</div> </li> </ul> <p align="justify">And <a href="http://channel9.msdn.com/Forums/Coffeehouse/MS-working-on-a-same-compiler-for-C-AND-C--Not-in-incubation-but-for-production-"><font color="#5b739c">a finding on Channel9 forums</font></a>, indicating that MSFT is hiring to create a unique compiler to be used on both, C++ and C#. </p> <p align="justify">So, after reading all of the above-mentioned material, if you have reached a point in you programming life where you do search for performance over safeness, is still the real question whether you should go native?</p> <p align="justify">Imvho, the question has then turned into “how”.</p> <p align="justify">The fact that a native solution gives the performance level you are looking for, does not mean that you must only use the C++ language. Even with the additions found in C++11 (a few of them that could have arguably stemmed from managed languages), it still has a cumbersome and unfriendly syntax.</p> <p align="justify">Or what is more, does neither mean that you won’t be able to use a language like C# to get an optimized native application for whichever platform you need (even the Web).</p> <p align="justify">If in order to get native bits we should always stick to “low-level” languages, then we had never moved from both Assembler or even binary notation towards C and all of its offspring. The evolution of hardware and compilers, made eventually C++ a better choice than ASM for performance-oriented apps, given that, marginally over time, the penalty curve was decreasing to an extent that it became irrelevant for native programmers.</p> <p align="justify">Therefore, what if you can get rid of Jittering (being replaced by a fully performance-oriented LLVM compiler) and still have an efficient GC for cases when manual memory (de)allocations are not needed?</p> <p align="justify">Much as I hate Objective-C, due to its ugly syntax, its newest versions for the MAC (and lately, the iOS) platforms offer LLVM native bits with GC.</p> <p align="justify">And what about a more friendly language like “<a href="http://dlang.org/comparison.html">D</a>”, instead? Latest evidence leads me to believe that C-based languages are moving towards its direction.</p> <p align="justify">My point is that going native does not necessarily mean that all  the memory management of your program must avoid a garbage collector for efficiency. Nor that you have to use languages with cumbersome or unfriendly syntax to get the most of efficiency. It depends mainly on how compilers and memory management tech evolve side by side to get the most out of the target platform, how unsafe you can go with a given language where and when needed, and how much penalty-free you can call native operations from external binaries.</p> <p align="justify">For instance, even though its limitations, you can do some unsafe programming with C# (fixed, stackalloc, etc.). The problem is that this feature is not allowed for all platforms (like WinPhone7), and in some platforms the set of operations is limited (i.e.: stackalloc is not available on the Compact Framework for the XBox 360).</p> <p align="justify">And again, the D language <a href="http://www.momentaryfascinations.com/programming/the.d.programming.language.html"><font color="#5b739c">seems to provide</font></a> a friendly syntax (close to C#) while offering a power similar to C++.</p> <p align="justify">Personally, I feel quite comfortable with C#; let’s be real here for a moment: I won’t be creating a Halo-like game any time soon, but I don’t want to go back to C++, say, to consume DirectX11 APIs. Having said that, I really hope C# evolves in a way that arguments from “native” programmers become trivial and the industry embrace it (as once embraced C/C++ to minimize the use of ASM). Evidence shows C# will evolve in this field, but as usual, time will tell …</p> <p align="justify">To wrap it up, does going native imply that .NET should die so that a syntax-friendly language like C# would survive? …</p> <p align="justify">Short answer: yes (or at least, as we know it today). Long answer: read all of the links provided in this post and see it for your self ;)</p> <p align="justify">My two cents, <br />~Pete</p> Ultraheadhttp://www.blogger.com/profile/07831144482704209713noreply@blogger.com0tag:blogger.com,1999:blog-34025596.post-67139795226979085822012-08-11T12:36:00.001-03:002012-08-11T13:07:41.814-03:00THE DARK KNIGHT RISES: 6 OUT OF 10<p align="justify">Finally I had got some time to go out and watch the final chapter of the Batman trilogy in Montevideo.</p> <p align="justify">First of all, thanks to Nolan and all the cast for giving back the dignity into the character on the screen! (indeed, compared to everything before Nolan’s view of Gotham, his trilogy is great).</p> <p align="justify">Now, I’m not going to talk here about any eventual loose ends, inconsistencies, speculations, deux-ex-machina, mythology and what not. Instead, I will mention two things: first, why I am not giving this film 10, and second what I would love to see in the future.</p> <p align="justify">About my 6-out-of-10 score for the film:</p> <ul> <li> <div align="justify">Batman is not presented as the world’s greatest detective.</div> </li> <li> <div align="justify">Batman exposes himself a lot in open spaces in the City, what goes against his ninjitsu training on the league of shadows.</div> </li> <li> <div align="justify">Bruce Wayne is always doubting of his role as Batman (in the comics he knows what he has to do and never doubts about becoming the Batman).</div> </li> <li> <div align="justify">There is no balance between action and quiet moments. In fact, there are many sequences with no action to unveil the plot that could have been short, and long action scenes with little interaction among lead roles (like Batman and Bane who could have got more encounters during the film, imvho).</div> </li> <li> <div align="justify">Bane is presented as a bully with a nonsense purpose, whose lines sounded with a strange intonations (what is more, his plan also resembles the Joker’s).</div> </li> <li> <div align="justify">No fight scenes between Talia al Ghul and Catwoman.</div> </li> <li> <div align="justify">Why waiting months to destroy Gotham? It’s just equivalent to “monologuing” …</div> </li> <li> <div align="justify">Supporting characters with no added value to the film.</div> </li> </ul> <p align="justify">I could go on with my list but I won’t because I like the fact that this time the films are serious about the character.</p> <p align="justify">Now, if a new director shows up with a new vision, please:</p> <p align="justify"><strong>1) Stop with the trend of villains with chaotic goals.</strong></p> <p align="justify">In past Superman films, Lex Luthor was presented as a madman with just a fixation with land (even if it’s alien), instead of being presented as a controversial businessman plus scientist with a double agenda for the sake of power and global domination.</p> <p align="justify">The same happens in Nolan’s trilogy with everything related to The League of Shadows, the Joker and Two face. They all seem to have something to prove but in the end they are just breaking havoc.</p> <p align="justify">In short, not everyone has to go mad or become a freak to be a villain in a movie.</p> <p align="justify">For example, The Penguin could be a can high-society mobster that trains birds for deadly tasks, whose umbrella is just a gun in disguise (like a blade inside a stick).</p> <p align="justify">Btw, I would love to see actor Jonny Coyne (Alcatraz’s warden) as The Penguin:</p> <p align="justify"><img style="display: block; float: none; margin-left: auto; margin-right: auto" src="http://www.1800pocketpc.com/blog/wp-content/uploads/2012/02/Warden-Edwin-James.jpg" width="153" height="236" /></p> <p align="justify"><strong>2) Let the Batman be the World’s Greatest Detective.</strong></p> <p align="justify">Besides the incredible gadgets, his strong spirit, determination, and his fighting skills, Batman is the world greatest detective. He moves in the shadows avoiding open scenes.</p> <p align="justify">And please, as a side note, find someone with a voice that does not have to force it to sound fierce.</p> <p align="justify"><strong>3) Stop with that line that everyone can be Batman.</strong></p> <p align="justify">Bruce Wayne is the one and only Batman. Period.</p> <p align="justify">Many can wear the cape for a brief period of time even in Comics, but none gives Batman the right touch of presence and solemnity.</p> <p align="justify">Why not adding more characters like Nightwing?</p> <p align="justify">Ok, I can give it that Robin could make things less realistic and prone to guess who the man behind the mask is, easily. Unless you don’t treat them as fulltime sidekicks of Batman but independent heroes them-selves.</p> <p align="justify"><strong>4) Write a storyline that can lead to a Justice League film.</strong></p> <p align="justify">If the original Batman is dead, how can this impact on an eventual Justice League film? In particular, what about the legendary friendship between Clark and Bruce? They are not just co-workers. They are friends -despite their different approaches to fight crime for the sake of justice, who trust each other (please, do not remind me of the kryptonite bullet here).</p> <p align="justify"><strong>5) And stop with unnecessary roles.</strong></p> <p align="justify">Focus on the lead characters and real supporting ones. Avoid wasting time adding roles that do not add relevant value to the storyline (like Deputy Commissioner Foley and or Bane’s wingman; I am not talking about the actors here –who are great- but the roles them-selves).</p> <p align="justify">Ok, enough words.</p> <p align="justify">To wrap it up, I enjoyed the film and the trilogy but I didn’t fall in love with it. In fact, even with all the flaws one can find in The Avangers movie, I still like it more than TDKR …</p> <p align="justify">My two cents, <br />~Pete</p> Ultraheadhttp://www.blogger.com/profile/07831144482704209713noreply@blogger.com0tag:blogger.com,1999:blog-34025596.post-26159074716270226972012-07-03T11:41:00.001-03:002012-07-03T13:00:46.618-03:00IMPORTANT NEWS ABOUT WINDOWS PHONE 8<p>In the last few days there have been tons of news regarding the upcoming Windows Phone 8.</p> <p>I am thrilled with two of them, especially:</p> <ul> <li>The addition of new markets, and </li> <li>Marketplace pre-compilation of apps. </li> </ul> <p><strong><u>New Markets</u></strong></p> <p align="justify">For years I have been sending comments and suggestions to Microsofties (including TPTB), so as to open the AppHub (both WP7 and XBLIG) to devs in countries outside the list of supported ones. Ditto for XBLive services and marketplaces.</p> <p align="justify">As a dev living in one of the unsupported countries, it was quite frustrating that the only two ways to get your app/game to the AppHub were either opening a company in, say, the US, and or talking to a publisher. Being both solutions, cumbersome.</p> <p align="justify">Recently, <a href="http://windowsteamblog.com/windows_phone/b/wpdev/archive/2012/06/28/first-look-at-the-windows-phone-8-marketplace.aspx">MSFT announced</a> that for Windows Phone 8, this is finally becoming a reality. So, at launch, over 180 countries will be added to the WinPhone8´s Marketplace (consumers) and its related AppHub (developers).</p> <p>Please, allow me getting it off my chest: FINALLY!!!</p> <p><u><strong>Marketplace Pre-Compilation</strong></u></p> <p align="justify">On March, 2010, I had submitted a suggestion to the XNA Team through the Connect site entitled “<a href="https://connect.microsoft.com/site226/feedback/details/539460/native-image-on-the-fly">Native Image On-The-Fly</a>” (edit: I am afraid it got lost in the last database purge, so the provided link won´t work).</p> <p align="justify">My suggestion was pre-compiling all approved apps/games to be published on the XBLIG channel to native images. Given the similar architecture of the XBox 360 consoles, this should be a straightforward process to be done once per app/game on the server side, with low-to-none chances of image corruption as target hardware would not change, saving the customer from waits stemming from Jittering during execution.</p> <p align="justify">The benefit, simple: faster start-up and running times of games since the console would be executing native images of assemblies instead of the (MS) intermediate-language versions of them (please note that memory would still be “managed”).</p> <p align="justify">As a result of one of the new features introduced to WinPhone8 devices (that is, support of native code), there was no reason why the above-mentioned rationale would be kept away from the upcoming product.</p> <p align="justify">Well, … <a href="http://mrpfister.com/journal/windows-phone-8-from-a-developers-standpoint/">MSFT also announced</a> that the Apphub will introduce a new service: pre-compilation of assemblies.</p> <p align="justify">So, if you build with managed code, the assemblies you submit to the AppHub will be compiled by the servers to native code before they make it into the marketplace. </p> <p align="justify">Please, allow me <u>again</u> getting it off my chest: FINALLY!!!</p> <p align="justify">Both news are a huge step forward. Let us hope MSFT eventually extend them to the XBox360’s AppHub …</p> <p align="justify">Cheers! <br />~Pete</p> Ultraheadhttp://www.blogger.com/profile/07831144482704209713noreply@blogger.com0tag:blogger.com,1999:blog-34025596.post-1755800161991274722012-06-21T18:55:00.001-03:002012-06-22T15:13:08.096-03:00WINDOWS PHONE 8 … YOU MEAN 7.8? NOPE …<p align="justify">Microsoft is letting a very interesting group of cats out the bag these days. First the news of its tablets (<a href="http://amapplease.blogspot.com/2012/06/surface-new-tablet-from-microsoft.html">Surface</a>) and now the news related to a new phone: <a href="http://windowsteamblog.com/windows_phone/b/windowsphone/archive/2012/06/20/announcing-windows-phone-8.aspx">Windows Phone 8</a>.</p> <p align="justify">You may be probably thinking that is not a new phone after all but a whole rebrand of an existing phone packed with a future update. If that is the case, you would be wrong. So wrong in fact, that you missed the lines that explain/claim that:</p> <ol> <li> <div align="justify">The phone will be bundled with a new OS, which require a more powerful hardware than the one existing on WP7 devices,</div> </li> <li> <div align="justify">Windows Phone 7 devices will NOT be receiving this new OS but an update (to version 7.8), which will help to reduce the UX-gap between phones, and</div> </li> <li> <div align="justify">The new devices will allow devs to use native code and do native calls. Yes, C/C++ …</div> </li> </ol> <p align="justify">Let us talk about each of these points for a moment. Shall we?</p> <p align="justify"><strong>(I) <u>The new OS</u></strong></p> <p align="justify">To keep the story short: if Windows 8 will be out soon, what else could you expect?</p> <p align="justify">Now, the long explanation …</p> <p align="justify">Microsoft is trying to extend the success around the XBox 360 console –yes, despite the RROD problem- to other platforms in order to unify the user experience on the multimedia front to compete with others big players for their marketshare, like Apple and Google. And the new OS is a step in that front.</p> <p align="justify">A broad set of hardware will be powered by the Windows 8 OS in the near future (PCs, tablets, …, consoles?), which in turn will help MSFT to position as a strong provider of a <u>unified</u> multimedia experience. So, providing a new OS branded with the number “8” for window phones is something one could have been expecting some time ago.</p> <p align="justify">Will its strategy succeed? Well, that leads me to the discussion of the second point.</p> <p align="justify"><strong>(II) <u>The “Old” Phones</u></strong></p> <p align="justify">In <a href="http://amapplease.blogspot.com/2012/06/surface-new-tablet-from-microsoft.html">my previous post</a>, I briefly mentioned the doom of a device that seemed promising by the time it came out: the Zune HD.</p> <p align="justify">Let me be clear here. The first Zune devices had nothing to offer against their “i” counterparts. But that was not the case for the Zune HD: neither in hardware, nor in software. </p> <p align="justify">The Zune HD device opened the door for the Windows Phone and also influenced, to some extent, the look’n’feel of both, the current 360’s dashboard and the UI of the “8-based” OS. And yet, it was left behind in the dust …</p> <p align="justify">Now, if the “old” 7 phones will be receiving an update in order to let users experience a taste of what the new OS will offer, why mentioning what happened to the Zune, then?</p> <p align="justify">Because users (customers and devs) could deem this behavior as <a href="http://www.techhive.com/article/2000161/opinion-microsoft-has-a-credibility-problem-with-windows-phone-8.html">a tendency</a>, as if the were treated as mere beta testers of MSFT’s experiments with mobile hardware: Zune, Zune HD, the infamous Kin, developer WP7 devices, and eventually retail WP7 devices.</p> <p align="justify">Not to mention that this may represent a slap in the face to one of its newest and major partners, Nokia, which recently released into the market a new line of WP7 devices!</p> <p align="justify">One can understand that a new OS may require new hardware to enjoy the full set of features it might offer, but rushing and or pushing things into the market this way, in a track-record of “no-more-support” deeds in a short period of time, could only become eventually a winning move if MSFT shows a strong commitment from now on to support its upcoming devices, for a reasonable minimum number of years.</p> <p align="justify">Make no mistake, I am a MSFT supporter, but it does not prevent me to chime in and do a wake-up call when I see a warning signal.</p> <p align="justify">As usual in life, time will tell …</p> <p align="justify"><strong>(III) <u>Native Code</u></strong></p> <p align="justify">“Developers, developers, developers …”</p> <p align="justify">Allowing native code on a Windows Phone is a fantastic move!!! </p> <p align="justify">But stating that by allowing native code it would be easier to port existing frameworks to the windows-phone environment is, imho, vague. It depends on a combination of factors: how many platforms you want to support, the techonologies you use to develop apps, and or how sensitive you are to fragmentation of code (since this feature will not be available to WP7 apps), to mention just a few.</p> <p align="justify">Now, does this mean that you must use native languages for WP8? The answer is “No”. You can still use managed ones like C# (specially if you want to create apps and games for both, WinPhone 7 and 8 devices).</p> <p align="justify">Does this mean you can still use XNA to produce games for WP8 devices? In spite of the fact that more and more it seems that XNA will be no longer updated –and no other <u>official</u> managed solution would take its place, <a href="http://forums.create.msdn.com/forums/t/105980.aspx">the answer is “Yes”.</a></p> <p align="justify">However, the answer for XNA-based games seems to be “No” for other platforms like the new “Surface” tablet and Windows 8 on ARM (on desktop mode you could still use it), unless you switch to unofficial solutions like Monogame or ANX.</p> <p align="justify">Personally, I do not care whichever languages/techs a dev picks to develop apps and or games. But I do care about using the same languages/tech for the most amount of target platforms out there to economize resources. That is why solutions like Unity3D are so popular these days …</p> <p align="justify">So I hope MSFT eventually returns to the dream of “The N Screens”, allowing <u>for all its </u><u>devices with the less amount of key differences</u> (that is, on what can be used/called/consumed), both, native languages and also native calls from managed code, so that devs can pick the right combination for their needs and or preferences …</p> <p align="justify">To wrap it up, some may be in favor, some may argue about pros and cons, and some may complain, but let us be honest and recognize that interesting times lay ahead. </p> <p align="justify">The only news left behind –at least, for now- is related to the rumored XBox 720. But who knows? Maybe we will receiving some official words from MSFT sooner than we expect …</p> <p align="justify">Cheers! <br />~Pete</p> Ultraheadhttp://www.blogger.com/profile/07831144482704209713noreply@blogger.com0tag:blogger.com,1999:blog-34025596.post-31293622944298694632012-06-19T12:22:00.001-03:002012-06-19T12:36:21.300-03:00SURFACE: THE NEW TABLET FROM MICROSOFT<p align="justify">Microsoft has recently presented its own line of tablets powered with the soon-to-come Windows RT and 8 Pro operative systems: the Microsoft Surface –branded with the new logo.</p> <p align="justify">Two major hardware specs will be available, which will depend on the OS flavor that comes with the tablet, but on the overall the product looks promising.</p> <p align="justify">A flood of comments and opinions has covered the Internet since then, but personally, I believe it is a very interesting product. All I hope is that this time, MSFT gives this line of products a very different fate than the one the Zune (HD) devices had …</p> <p>Enough words, so here’s the presentation video:</p> <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:c415b984-a3a3-4734-bb0d-fe68a7b58e18" class="wlWriterEditableSmartContent"><div id="4e3e427e-57ce-47ec-bf9d-4baf93824b5b" style="margin: 0px; padding: 0px; display: inline;"><div><a href="http://www.youtube.com/watch?v=jozTK-MqEXQ" target="_new"><img src="http://lh5.ggpht.com/-83gFyRjszIQ/T-CZGQ4v9rI/AAAAAAAAANs/wpa6dsa0Xmw/videodd6d0337041c%25255B3%25255D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('4e3e427e-57ce-47ec-bf9d-4baf93824b5b'); downlevelDiv.innerHTML = "<div><object width=\"448\" height=\"252\"><param name=\"movie\" value=\"http://www.youtube.com/v/jozTK-MqEXQ?hl=en&hd=1\"><\/param><embed src=\"http://www.youtube.com/v/jozTK-MqEXQ?hl=en&hd=1\" type=\"application/x-shockwave-flash\" width=\"448\" height=\"252\"><\/embed><\/object><\/div>";" alt=""></a></div></div></div> <p align="justify">Something tells me that the mouse era –and the keyboard´s, as we know it- is coming to an end.</p> <p>Enjoy! <br />~Pete</p> <p>> <a href="http://unmapaporfavor.blogspot.com/2012/06/surface-la-nueva-tableta-de-microsoft.html">Link</a> to Spanish version.</p> Ultraheadhttp://www.blogger.com/profile/07831144482704209713noreply@blogger.com0tag:blogger.com,1999:blog-34025596.post-65526251027734472982012-04-30T11:49:00.001-03:002012-04-30T13:13:57.871-03:00THE AVENGERS: AN EPIC FILM !!!<p align="justify">Lately, I haven´t got enough time left to take a break … not even to post something on my blog. But I think this one really deserves it!</p> <p align="justify">I have been a superheroe comic-book collector since I can remember who has changed throughout the years from regulars to graphic novels.</p> <p align="justify">As a huge reader of Marvel’s, I was expecting The Avengers movie with scrambled feelings since not all the previous movies that drove us to this one have been that great, imvho of course.</p> <p align="justify">The first Ironman movie was incredible, the second one was (almost) ok. Captain America´s wasn´t that great but got the job done. Ditto for Thor. And Hulk has been trying to find the place it deserves on the big screen with mixed results.</p> <p align="justify">For those in the US that are waiting for its opening night, let me tell you that it is really safe to go to the theather with your expectations high since you won’t get dissapointed. In fact, I believe the movie will surpass your expectations!</p> <p align="justify">No pictures and videos that you have found on the Internet will prepare you for you are going to enjoy. Except for the 3D fxs –that were only ok for me, the film delivers everything you can expect from a superheroe movie that well that you don’t see actors playing the roles but the characters themselves. And the latter in film with several potential lead roles is a hugh task that luckily, for the film, ended superb.</p> <p align="justify">The storyline is balanced. All characters have their due time. Action and FX are present only when and where needed. And humour touches are smart and welcome.</p> <p align="justify">Again, you won’t be paying attention to the actors since you will buy that the ones you are watching on screen are the heores and villains themselves. Btw, hats off to Mark Ruffalo who had some challenge before him –specially, after the second Hulk movie- and played, imho, the Bruce Banner I always wanted to see. And as for the Hulk, … well … you will have to wait and see ‘cause I don’t want to spoil anything!</p> <p align="justify"><strong>[SPOILER]</strong> <br />One more thing, stay on your seats when the movie finishes for a final scene where you will know The Being behind Loki´s strike on earth (and yeap, it was the one I was expecting for years!). This will open the door for future movies and hopefully, if the Avengers was Epic, the one that shows off this creature in its full potential will be for sure also epic but in a cosmic scale! <br /><strong>[/SPOILER]</strong></p> <p align="justify">To wrap it up, The Avengers is one of the best superheroe movies ever that deserves a place on the blu-ray shelves of any collector once it gets out. What is more, it raises the bar high for the TDKR … gloves off!</p> <p align="justify">Here’s <a href="http://translate.google.com/translate?sl=es&tl=en&js=n&prev=_t&hl=es&ie=UTF-8&layout=2&eotf=1&u=http%3A%2F%2Fcineenuruguay.blogspot.com%2F2012%2F04%2Fcritica-avengers-los-vengadores.html&act=url">the link</a> to an excellent (translated) review for the film.</p> <p align="justify">Enjoy the movie, guys! <br />~Pete</p> <p align="justify">> <a href="http://unmapaporfavor.blogspot.com/2012/04/los-vengadores-una-pelicula-epica.html">Link</a> to Spanish version.</p> Ultraheadhttp://www.blogger.com/profile/07831144482704209713noreply@blogger.com0tag:blogger.com,1999:blog-34025596.post-1408884735182683762012-02-19T13:30:00.001-02:002012-02-19T13:46:51.300-02:00BOOK REVIEW: XNA 4 GAME DEVELOPMENT BY EXAMPLE (VB)<p align="justify">Last month, a new book about XNA 4 hit the shelves worldwide:</p> <p align="justify"><a href="http://www.packtpub.com/microsoft-xna-4-0-game-development-by-example-beginners-guide/book"><img style="display: block; float: none; margin-left: auto; margin-right: auto" alt="XNA 4.0 Game Development Example - Visual Basic Edition" src="http://www.packtpub.com/sites/default/files/2403EXP_XNA%204.0%20Game%20Developement%20by%20Example.jpg" width="283" height="357" /></a></p> <p align="justify">His author, Kurt Jaegers, is the creator of a well known site that covers lots of XNA material: <a href="http://xnaresources.com/">XnaResources</a>.</p> <p align="justify">The book is based on its <a href="http://www.amazon.com/gp/product/1849690669/ref=cm_cr_asin_lnk">C# sibling</a> –from same author, and I personally deem it as a great introduction to XNA 4.0 for devs that use Visual Basic as their primary language.</p> <p align="justify">Targeting beginners, the author introduces useful concepts and techniques applicable to both, game development per se and XNA 4.0, through four games:</p> <ul> <li> <div align="justify">A puzzler, </div> </li> <li> <div align="justify">A space shooter, </div> </li> <li> <div align="justify">A multi-axis shoot 'em up, and </div> </li> <li> <div align="justify">A jump-and-run platformer.</div> </li> </ul> <p align="justify">All code presented in the book is fully explained by the Author on a clear and simple way, what makes each chapter easy to follow.</p> <p align="justify">So if you are a Visual Basic geek that want to enter the word of XNA, then this is your chance to take your first steps!</p> <p align="justify">You can buy a print and or digital copy of the book either from <a href="http://www.packtpub.com/microsoft-xna-4-0-game-development-by-example-beginners-guide/book">Pack Publishing</a> or <a href="http://www.amazon.com/XNA-4-0-Game-Development-Example/dp/1849692408/ref=sr_1_2?s=books&ie=UTF8&qid=1328623160&sr=1-2">Amazon</a>.</p> <p align="justify">If you are intertested in getting a free digital copy of it –provided by Packt Publishing, then write a comment on this page stating why you deserve the copy and the person that gives imo the best comment gets it!</p> <p>My two cents … <br />~Pete</p> <p>> <a href="http://unmapaporfavor.blogspot.com/2012/02/book-review-xna-4-game-development-by.html">Link</a> to Spanish version.</p> Ultraheadhttp://www.blogger.com/profile/07831144482704209713noreply@blogger.com3