tag:blogger.com,1999:blog-81499233999674425172024-03-13T16:20:22.177-07:00Things for the Games IndustryTEvashkevichhttp://www.blogger.com/profile/15221987670020160100noreply@blogger.comBlogger27125tag:blogger.com,1999:blog-8149923399967442517.post-70110403520782484242019-10-24T03:13:00.000-07:002019-10-24T03:13:08.696-07:00Tada68 Keymap FlashingHeyo (first time in forever)<div>
<br /></div>
<div>
So this is just a super quick post about something not very related to TechArt stuff, but I recently bought a new keyboard as my Razer Lycosa Mirror finally bit it (the space bar finally stopped working for good this time...it's threatened to die a few times before but never fully given up)</div>
<div>
<br /></div>
<div>
So I bought a Tada68 from <a href="https://kbdfans.com/collections/fully-assembled-keyboard/products/tada68-mechanical-keyboard-gateron-swtich-65-layout-dye-sub-keycaps-cherry-profils" target="_blank">KBD Fans</a> on recommendation from one of my friend's who is very much into custom keyboards (which I always said I probably wouldn't go down that route cause I know jack about custom boards). Anyways, it's shown up and since it's not a full keyboard I was missing a few creature comforts such as media buttons and I wanted my Home/End Keys back (since the board has PgUp/PgDown by default instead)</div>
<div>
<br /></div>
<div>
I had to try to look up how to change the keymap since I know you can program this keyboard to do a ton of things if you so desire, but I founda lot of outdated or just very convoluted info on how to get a new keymap installed on the board. </div>
<div>
<br /></div>
<div>
Now that I've done it I wanted to just write it down so maybe someone else will happen across it. This is how I managed to get my own key map on my Tada68.</div>
<div>
<br /></div>
<div>
Obviously I assume you have a Tada68 board as I have no idea how to do it for other boards (but I think some of them are pretty similar?)</div>
<div>
<br /></div>
<div>
<ol>
<li><a href="https://www.youtube.com/watch?v=tx54jkRC9ZY" target="_blank">Watch this video on how to use the QMK Configurator</a> This is the video that I found on how to setup a keymap for my board and it allows you to do it in a browser with no need to download extra softwares and all that jazz. It was super easy and straight forward (and the video is pretty short)<br /></li>
<li>After you've downloaded the compiled .bin file from QMK Configurator, I made a copy (in case I want to have different version and swap between them later on) and named that copy to FLASH.bin. <br /></li>
<li><b><i>NOTE: This next step "disables" your keyboard, so you'll have to use the right click menu to copy/paste etc.</i></b> On the back of your Tada68, you'll see a little reset button, press it and it will make your board start to flash and should connect to your computer so you can access the on board memory.<br /></li>
<li>There should be a FLASH.bin file on your board already, copy this to somewhere else so you have a backup of it. Delete the file on your board and then drag your FLASH.bin file that you got from QMK Configurator on to the board and hit ESC,<br /><i><b>NOTE: I've seen it said in other places to NOT do the eject device from computer as it can cause issues, so Please Please Please, hit the ESC key instead.</b></i><br /></li>
<li>That's it, you're done. You should have your keymap on your board all ready to go. </li>
</ol>
<div>
<br /></div>
</div>
<div>
I by no means take responsibility for any damage that could be caused by doing it this way, but it worked completely fine for me ~3 times now (small key changes and what not) so hopefully it will work for you :) </div>
<div>
<br /></div>
<div>
<br /></div>
TEvashkevichhttp://www.blogger.com/profile/15221987670020160100noreply@blogger.com0tag:blogger.com,1999:blog-8149923399967442517.post-83346394443308721142016-09-03T10:52:00.000-07:002016-09-03T11:05:15.696-07:00Unity Fitbit Class finally online!T.StartPost();<br />
<br />
Hey everyone. So I've done 2 posts on Unity and Fitbit and how to get it up and running before.<br />
Lots of people have been asking about the UnityFitbit class that I either mentioned I would get online (and have just been busy/not wanting to refactor so you guys can actually use it :P )<br />
<br />
Well today I finally sat down and refactored it out so it "should be" ready to be used by other people<br />
<br />
Find it on Github and feel free to submit fixes/updates etc. to it as well.<br />
<br />
<a href="https://github.com/TravisEvashkevich/UnityFitbit">https://github.com/TravisEvashkevich/UnityFitbit</a><br />
<br />
By all means there is some crap in there that I should clean up (the Json convert to XML for starters)<br />
But this is just what I've been using because it's what "I" need personally for my project.<br />
<br />
If you think you can help out by making it work better and just in the JSON by all means please make a branch and submit some pull requests :D<br />
<br />
T.Out();<br />
<br />
PS: Make sure to check out <a href="http://technicalartistry.blogspot.ca/2016/01/fitbit-unity-oauth-2-and-native.html%C2%A0" target="_blank">http://technicalartistry.blogspot.ca/2016/01/fitbit-unity-oauth-2-and-native.html </a> if you need to figure out how to get it all working natively (as per Fitbit's ToS)TEvashkevichhttp://www.blogger.com/profile/15221987670020160100noreply@blogger.com1tag:blogger.com,1999:blog-8149923399967442517.post-85626457182377834842016-06-02T15:36:00.000-07:002016-06-02T15:36:04.974-07:00Photoshop ExtensionsT.StartPost();<br />
<br />
Well it's another post about Photoshop and some extensions I've made.<br />
<br />
If you remember from a few months back I made and released <a href="http://technicalartistry.blogspot.ca/2016/03/layer-cake-growth-from-script-to.html" target="_blank">Layer Cake</a> out into the world and just last week I released another called <a href="http://polycount.com/discussion/171228/photoshop-extension-normally-panel" target="_blank">Normally Panel</a>.<br />
<br />
So Normally Panel allows you to do things like Rotations, Inverting and 2 different types of blending on Normal Maps in Photoshop.<br />
<br />
Today I released (like literally 30 mins ago) <a href="http://polycount.com/discussion/171661/photoshop-extension-lazy-save" target="_blank">Lazy Save</a>.<br />
Lazy Save was made for my own use at the start because I was getting annoyed that I had to keep doing<br />
<ul>
<li>Save As</li>
<li>Select my image output type</li>
<li>Append or even change the name of the file I was going to save out</li>
<li>Finally Save</li>
</ul>
<div>
So Lazy Save you select the folder you want to Save to. </div>
<div>
Select your naming convention (there's 4 options to choose from currently)</div>
<br />
<div>
-Do not use Group Names -> this will save your image out as your file name (if it's Example.psd, your image will be Example.jpg/png etc.)</div>
<div>
<div>
-GroupName as prefix -> this will save your image out as MyGroup_Example.jpg/png</div>
<div>
-GroupName as postfix -> this will save your image out as Example_MyGroup.jpg/png</div>
<div>
-GroupName as output name -> this will save your image out as MyGroup.jpg/png</div>
</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://travisevashkevich.com/customImages/Code/LazySave/LazySave.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://travisevashkevich.com/customImages/Code/LazySave/LazySave.gif" height="486" width="640" /></a></div>
<div>
<br /></div>
<div>
Here's an example of it in action also with going through all the types of naming conventions.</div>
<div>
<br /></div>
<div>
TGA also pre looks at your channels to determine if you are in RGB mode and then if you have an alpha channel. If you do, it will auto save it as a 32bit TGA and if you don't have any extra or you're in a non RGB mode, it will save it as a 24bit.</div>
<div>
<br /></div>
<div>
I hope people find this handy I know I will/have already.</div>
<div>
<br /></div>
<div>
T.Out();</div>
<div>
<br /></div>
<div>
<br /></div>
<br />
<div>
<br /></div>
<div>
<br /></div>
TEvashkevichhttp://www.blogger.com/profile/15221987670020160100noreply@blogger.com0tag:blogger.com,1999:blog-8149923399967442517.post-15851568310292500872016-03-06T12:40:00.001-08:002016-03-06T12:40:31.995-08:00Layer Cake, Growth from a script to an extension!T.StartPost();<br />
<br />
So my last post was about how I made a little script for Photoshop called Layer Cake that allowed for offsetting multiple layers at once (instead of the tedious manual way that people are doin it now :P )<br />
<br />
So, since that post, I gained feedback and feature requests on the <a href="http://polycount.com/discussion/165265/photoshop-script-layer-cake-multiple-layer-offsetting/p1" target="_blank">Polycount thread</a> and because of this, Layer Cake is now a 4 script Photoshop Extension.<br />
<br />
Grab the extension from<br />
<a href="http://travisevashkevich.com/LayerCake.html">http://travisevashkevich.com/LayerCake.html</a><br />
<br />
It's currently available (known and tested) in CS6, CC 2014 and CC 2015!<br />
<br />
You can see a NEW AND IMPROVED feature video about Layer Cake below!<br />
<iframe allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/8P55S4OMPfQ" width="560"></iframe><br />
<br />
In short, Layer Cake is now:<br />
<u>Layer Cake </u><br />
Multi-Layer Offsetting of selected layers. No more hiding layers you don't want to offset, just select what you want to offset (even groups!) and hit Layer Cake. You can even preview your offset, so you know where it's going to end up.<br />
<br />
<u>Rebake</u><br />
Whatever values you used last to offset with Layer Cake, you can now hit Rebake to use the same values to offset WITHOUT having to open the UI. Great when you're doing the same offset amount multiple times!<br />
<br />
<u>Icing</u><br />
Preview your Tile in a 2x2 size document to quickly check for seams or see how busy it is. Want to see it in a bigger set? Hit Icing again on your new document to essentially see it in a 4x4 (you can keep hitting Icing to get bigger and bigger but beware of how your computer handles big documents)<br />
<br />
<u>Spectacles</u><br />
Gaussian Blur and Smart Sharpen for tiling textures. Run Spectacles on your tile to have Spectacles put it in a 3x3 where you can put some Gaussian Blur or Smart sharpen on it with less chance of making seams. When you're done, hit "Done!" to end up with your newly made layer back in your starter document.<br />
<br />
<br />
I believe there is always more to do, so if you think there is more things I can make to help speed up (note SPEED UP, not DO FOR ME) tiling texture creation I'm all ears.<br />
<br />
And I'd LOVE to see or HEAR about what you guys are making with Layer Cake so feel free to let me know!<br />
<br />
T.Out();TEvashkevichhttp://www.blogger.com/profile/15221987670020160100noreply@blogger.com0tag:blogger.com,1999:blog-8149923399967442517.post-91887537683520635102016-02-10T12:25:00.001-08:002016-02-15T00:52:41.527-08:00Layer Cake, a Photoshop script to Offset Multiple layers at once!T.StartPost();<br />
<br />
So I have been working on a script recently for Photoshop at the request of <a href="https://jessievanaelst.wordpress.com/" target="_blank">Jessie Van Aelst</a> who was working on a tileable texture and hated having to manually offset each layer with Adobe's built in Offset filter. <br />
<br />
I agree that it's quite tedious that to offset more than 1 layer at a time you have to keep hitting Ctrl F after you do it once...and keep tweaking your offset etc. So I started working on<a href="http://travisevashkevich.com/scripts.html" target="_blank"><b><i> Layer Cake</i></b></a>!<br />
<br />
Layer Cake is a script that will take your visible selected layers and offset them all the same amount as you specify. I had found another script that offset every visible layer in your document but that isn't very user friendly since you'd have to turn off any layer you don't want offset etc. so Layer Cake fills a void pretty well I think :)<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://travisevashkevich.com/customImages/Code/LayerCake/LayerCake.gif" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://travisevashkevich.com/customImages/Code/LayerCake/LayerCake.gif" height="327" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Click to Enlarge</td></tr>
</tbody></table>
I gave all the same options as the built in Offset has (currently minus the preview, but I'm working on it!) to make users feel at home with it. I also Ctrl Z a few times in the gifs to make sure you can see the images are offset.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://travisevashkevich.com/customImages/Code/LayerCake/LayerCake2.gif" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" src="http://travisevashkevich.com/customImages/Code/LayerCake/LayerCake2.gif" height="350" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Click to Enlarge</td></tr>
</tbody></table>
<br />
You can grab the script <a href="http://travisevashkevich.com/scripts.html" target="_blank"><b><i>HERE</i></b></a>. It comes with a Read me that tells you where to put it and how to use it as well :)<br />
<br />
I hope people find this script useful and feel free to let me know if you run into problems with it so I can try to improve it and make it as useful as I can!<br />
<br />
T.Out();<br />
<br />TEvashkevichhttp://www.blogger.com/profile/15221987670020160100noreply@blogger.com0tag:blogger.com,1999:blog-8149923399967442517.post-54793030992148756242016-01-12T13:10:00.001-08:002016-01-12T13:28:15.625-08:00Fitbit, Unity, OAuth 2 and NATIVE browser...and about a week of cursing.T.StartPost();<br />
<br />
SO! I found out not too long after <a href="http://technicalartistry.blogspot.ca/2015/07/oauth2-unity-and-month-of-cursing.html" target="_blank"><b><i>my last post</i></b></a> that I (and everyone else using Fitbit data) would not longer be allowed to use Webview based solutions for gaining access to Fitbit data via OAuth 2.<br />
<br />
This creates quite the predicament as when you're using Unity there's no Unity specific way of getting the OAuth return code from the browser (such as Chrome, Safari etc.)<br />
<br />
This meant that I had to spend about the last week cursing while trawling the internet for solutions. Unfortunately there is a bunch but some of them do not seem to work. THANKFULLY, how ever, there is one that I found that DID work and I have to definitely give credit where credit is due and say that without <a href="http://oferei.com/2013/06/serverless-instagram-authentication/#comment-39764" target="_blank"><b><i>Ofer Reichman's blog post</i></b></a> I probably would not have gotten this to work.<br />
<br />
You can pretty much follow his verbatim to get it working but I will also transcribe some small differences in things that work for Fitbit . Also I'm working on refactoring my FitbitAPI class for Unity. I'm likely to just release it on Github for the betterment of the community and so others can help to make it better and learn from it as well.)<br />
<br />
So without Further-Ado:<br />
<br />
<h3>
<b><i>How to Do OAuth 2 authentication in Unity FOR Fitbit..With a Native Browser (Known to work with Android)</i></b></h3>
<br />
**If you want more in depth reading you can read Ofer's post but I'm just going to cover the nitty gritty of getting it to work with Fitbit**<br />
<br />
Assumptions by me:<br />
-You already have an app registered with Fitbit<br />
-You already have Android SDK's installed<br />
-You already have decent knowledge of Unity<br />
<br />
<b>I'm using :</b><br />
Windows 10<br />
Eclipse Juno (but shouldn't make a difference if you're using a higher version)<br />
Unity 5<br />
<br />
<br />
<iframe allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/v5s7BMPtK9E" width="560"></iframe><br />
<br />
Hope this helps :) Feel free to comment and hopefully I can help (no promises though)<br />
<br />
T.Out();TEvashkevichhttp://www.blogger.com/profile/15221987670020160100noreply@blogger.com33tag:blogger.com,1999:blog-8149923399967442517.post-35032097695706370622015-07-01T12:19:00.002-07:002016-09-03T10:58:14.130-07:00Fitbit, OAuth2, Unity and a Month of Cursing.UPDATE:<br />
UnityFitbit C# class is finally up on Github<br />
<a href="http://technicalartistry.blogspot.ca/2016/09/unity-fitbit-class-finally-online.html">http://technicalartistry.blogspot.ca/2016/09/unity-fitbit-class-finally-online.html</a><br />
Go check it out and hope it helps :D<br />
<br />
T.StartPost();<br />
<br />
So it's been a while since I posted (what's new :P seems to be my MO)<br />
<br />
Recently I've been trying to get my game started which is finally getting started. The biggest hurdle for me was the fact that I wasn't going with a traditional "I create all the data" game but am relying on an outside source to create the data. This data comes from Fitbit.<br />
<br />
So the problem for me was mainly 3 things:<br />
<br />
1. I've never done a game for mobile explicitly<br />
2. I've never used OAuth2<br />
3. There's little to no good documentation on how to do OAuth2 nicely in Unity.<br />
<br />
I've made the choice to use Unity as I want to be able to develop for as many mobile platforms as fast as possible (the fact also that I've never done native Android/iOS or WP doesn't help that :P )<br />
<br />
So, the way I'm trying (as this is still a work in progress and the development has only earnestly gotten under way about....2 days ago?) to get around the mobile part is through Unity as I have done a "mobile" game for the Surface in my final year of university (for the surface)<br />
<br />
I've done mostly C# for the last few years so it's the easiest for me to jump right into as well.<br />
<br />
The OAuth2 part and the lack of good follow up on how people are doing it is the thing that took me a good month (while working a full time job) to finally get.<br />
<br />
The thing for Fitbit OAuth2 that is annoying is the documentation seems structured for someone that has done either webdev or OAuth2 previously.<br />
<br />
Now that I've done it, it seems fairly easy but man oh man was I cursing it and Unity for the last month.<br />
<br />
So I decided to put a small article up about how I got it going in the hopes it helps others in the future.<br />
<br />
SO Let's Get To It!<br />
<br />
**I'm not going to cover the HOW OAuth2 works as it'll be more or less described through the steps anyways. **<br />
In the code bits, if it's got a <span style="background-color: yellow;">Yellow</span> highlight, it means it's something YOU have to provide from the api (the clientID, ConsumerKey, CallBackUrl etc.)<br />
<br />
<u><b style="background-color: red;">Step 1:</b></u><br />
<u><b style="background-color: red;">***EDIT: PLEASE NOTE THAT FOR Fitbit the use of Webviews is NO LONGER allowed. All the OAuth specific code stays the same but you will want to go check this other post</b></u><br />
<a class="externalLink" href="http://technicalartistry.blogspot.ca/2016/01/fitbit-unity-oauth-2-and-native.html" rel="nofollow" style="background-color: #fafafa; border-radius: 5px; color: #5284bd; font-family: Helvetica, Arial, sans-serif; font-size: 14.6667px; line-height: 20.5333px; margin: 0px -3px; padding: 0px 3px; text-decoration: none;" target="_blank">http://technicalartistry.blogspot.ca/2016/01/fitbit-unity-oauth-2-and-native.html</a><br />
<span style="background-color: red;">***</span><br />
<br />
<strike>You're going to need a webview. This is something that you can start a webpage in Unity on.</strike><br />
<strike>This is essential as you will need to get your "code" back from whatever OAuth2 service you're going to be pinging. Depending on your webview this can range from cheap to VERY expensive.</strike><br />
<strike><br /></strike>
<strike>The plugin I'm using currently for this part is <a href="https://www.assetstore.unity3d.com/en/#!/content/31086" target="_blank">Cross Platform Native Plugins</a>. It has the webview, it has GREAT support from the devs (seriously I send them an email and usually within a few hours to one day it's answered) and also it will have extra stuff for me to use later (twitter,FB etc.)</strike><br />
<strike><br /></strike>
<strike>You can set the Scheme that the webview will look for so that way when you get the redirect with the code, the webview will grab the message and you can do stuff with it :)</strike><br />
<br />
<br />
<b><u style="background-color: red;">Step 2:</u></b><br />
Now that you have your webview and have it configured and ready to go, what do we do?<br />
Well OAuth2 <strike>is a strangely strange beast that likes to sometimes just tell you to get stuffed...</strike><br />
makes it so we never touch the users credentials. No username or password is stored or touched by us, it's all by the service itself.<br />
<br />
The general way we'll get the first Code to get started is by configuring a URL that will tell the service who we are (app) and what we want (stuff)<br />
<br />
For Fitbit for example it would be like this<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkMXVe8Cjk3ViDYPU_garyAoxPo5rHAbG1UCcdg1w0x36hdGA5BSm8MRtQnAuL5aQbs7XubDdiSiN5JZQDc3pM3Lg_ywNOFtmVJGwaf4Ut8LkV7nJLBEGj1ZdcUtHAcfmI166_sxOI1Aix/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> https://www.fitbit.com/oauth2/authorize?response_type=code&client_id=ClientID&redirect_uri=" +
WWW.EscapeURL(CallBackUrl) +
"&scope=activity%20nutrition%20heartrate%20location%20profile%20sleep%20weight%20social
</code></pre>
<br />
This will tell Fitbit that you want to start the OAuth2 process and would like access to the things in the scope (nutrition, heartrate etc.)When you Register an app with Fitbit you'll get a ClientID and you can also specify a CallBackUrl. In your code you define the same things and that's more or less it.<br />
<br />
One thing to note about the Callbackurl here, it has to be ESCAPED. In Unity you do this with the WWW class by going WWW.EscapeURL("UrlToBeEscaped"); This makes it weburl ready (replaces / with %20 for example)<br />
<br />
What you would get back if you were not using a webview would be something like Callbackurl/?code=bunchOfRandomNumbersAndLetters<br />
<br />
With the webview like CPNP, you won't likely see that page at all (IF you're using a scheme like myapp:// as it will just not load the page since your callbackurl doesn't have to be a valid alive website) and it will just be grabbed by the webview in the WebViewMessage.<br />
<br />
<b><u style="background-color: red;">Step 3:</u></b><br />
When you've grabbed your code from the url/message, then you can move onto the next step which is requesting an actual Authorization Token. This is the token that allows you to then make calls to Fitbit and get data.<br />
<br />
This is the part that took me the longest to get right and also the part that no one else seems to be documenting nicely.<br />
<br />
The part that was hard for me was the fact that this uses webcalls which I've never done and couldn't find much on what for example GET or POST calls were, what I needed to fill in where etc.<br />
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkMXVe8Cjk3ViDYPU_garyAoxPo5rHAbG1UCcdg1w0x36hdGA5BSm8MRtQnAuL5aQbs7XubDdiSiN5JZQDc3pM3Lg_ywNOFtmVJGwaf4Ut8LkV7nJLBEGj1ZdcUtHAcfmI166_sxOI1Aix/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(_clientID + ":" + _consumerSecret);
var encoded = Convert.ToBase64String(plainTextBytes);
var form = new WWWForm();
form.AddField("client_id", _clientID);
form.AddField("grant_type", "authorization_code");
form.AddField("redirect_uri", WWW.UnEscapeURL(CallBackUrl));
form.AddField("code", _returnCode);
var headers = form.headers;
headers["Authorization"] = "Basic " + encoded;
_wwwRequest = new WWW("https://api.fitbit.com/oauth2/token", form.data, headers);
</code></pre>
<br />
So, This is the step by step part for what's happening in this code.<br />
OAuth2 requires that you encode your ClientID and your ConsumerSecret in Base64 WITH a colon (:) between them.<br />
I honestly messed up for a few days because I had a semi-colon(;) instead and it took a friend looking at it and the documentation to go ...You're Dumb. (Thanks Gerard)<br />
<br />
Next is setting up the data. This is also a part that I had NO IDEA where to put it and how to do the call itself. Again, this is thanks to a my buddy Gerard that was looking over the code for a while and telling me how to formulate it cause I had it SO SO SO wrong before.<br />
<br />
From the Fitbit Docs<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkMXVe8Cjk3ViDYPU_garyAoxPo5rHAbG1UCcdg1w0x36hdGA5BSm8MRtQnAuL5aQbs7XubDdiSiN5JZQDc3pM3Lg_ywNOFtmVJGwaf4Ut8LkV7nJLBEGj1ZdcUtHAcfmI166_sxOI1Aix/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> This example assumes that the code URI parameter value in the callback URI was 1234567890.
POST https://api.fitbit.com/oauth2/token
Authorization: Basic Y2xpZW50X2lkOmNsaWVudCBzZWNyZXQ=
Content-Type: application/x-www-form-urlencoded
client_id=22942C&grant_type=authorization_code&redirect_uri=http%3A%2F%2Fexample.com%2Fcallback&code=1234567890
</code></pre>
With this example you can see that we do the same setup although the AddFields break up the whole URL/data that we have to POST. If you're keen you'll also notice that their redirect_uri is escaped, this is another hiccup that took me a good few days to get to finally go (and was actually the last thing I fixed to make it all work) This has to be NOT escaped when you put it in the form.addfield.<br />
<br />
So we make the data by using the wwwForm and adding it all to the fields like above, then we make the Authorization Header which needs a value of "Basic " + our encoded clientID:ConsumerSecret<br />
<br />
After that is all done, we make a new WWW and put the url as our Token url, put the data from the form in it, and then the headers.<br />
<br />
One thing to note, in the fitbit doc you'll see the Content-Type: that is AUTO added by wwwform so you don't have to add it yourself.<br />
<br />
<br />
<b><u style="background-color: red;">Step 4:</u></b><br />
If all goes well, you'll get a bunch of JSON back with<br />
access_token, expires_in, refresh_token, and token_type<br />
The main things that I care about are access_token and refresh_token.<br />
<br />
The expires is always the same and so is the token_type.<br />
<br />
You parse out the JSON and get your access_token and then you can start getting data :D<br />
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkMXVe8Cjk3ViDYPU_garyAoxPo5rHAbG1UCcdg1w0x36hdGA5BSm8MRtQnAuL5aQbs7XubDdiSiN5JZQDc3pM3Lg_ywNOFtmVJGwaf4Ut8LkV7nJLBEGj1ZdcUtHAcfmI166_sxOI1Aix/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> var headers = new Dictionary<string, string>();
headers["Authorization"] = "Bearer " + _oAuth2.Token;
_wwwRequest = new WWW("https://api.fitbit.com/1/user/-/profile.json", null, headers);
</code></pre>
<br />
You pretty much copy paste the other requests/posts that you made BUT instead of filling in data in the 2nd parameter, you put it null. This tells the WWW that you're doing a GET request<br />
<br />
One of the things I only just figured out yesterday was that the url you put in this request will NOT give you everything you want. It's annoying but you will still have to make other calls. This one for example will ONLY get you the profile data of the user.<br />
Unfortunately this doesn't do half of what I need so I will need to do more calls for things like Activities to get the current steps, floors etc.<br />
<br />
Things for that can be found in the Fitbit Docs<br />
<a href="https://wiki.fitbit.com/display/API/API-Get-Activities" target="_blank">https://wiki.fitbit.com/display/API/API-Get-Activities</a><br />
For example.<br />
<br />
Well I hope this has informed and helped people out. I hope that it also will make people's lives easier when it comes to what is needed and how to do it for OAuth2. This is generally the same way that you do it for other OAuth2 things (at least from looking at the flow/docs for things like the Jawbone for instance.)<br />
<br />
T.Out();<br />
<br />
<br />
<br />
<br />
<div>
<br /></div>
TEvashkevichhttp://www.blogger.com/profile/15221987670020160100noreply@blogger.com15tag:blogger.com,1999:blog-8149923399967442517.post-3810759922798071702014-11-23T12:25:00.000-08:002014-11-23T12:25:31.099-08:00UpdateT.StartPost();<br />
<br />
Well it's been a decent while since I posted last, like usual since the last time there has been some changes to the ole life.<br />
<br />
For starters I am all graduated and edumicated. I also now work for the University that I just graduated from as the Community Manager (it's a pretty fun fit if I do say so myself). I will honestly say I wasn't sure how different it would be, transitioning from student to faculty and I must say it's been quite easy and smooth. Slowly but surely I'm learning all the in's and outs of the work environment and it's hierarchy.<br />
<br />
The transition means that I take on some more responsibilities and do a lot of the stuff I did as a student still, but in a more "professional" way...So our weekly study nights still continue (and this year have FLOURISHED with each week usually having 100+ students compared to our last years of 30-40 average) and I now also follow up with the new/current international students that are enrolled in DAE.<br />
<br />
It does feel strange sometimes knowing that I'm no longer a student but faculty but I try to keep it to a minimum so that way I can still stay in tune with the community as much as possible.<br />
<br />
Other than that there's obviously the whole "need to keep my skills up" portion of life which has started again as well (I did take a hiatus from all the stuff I was doing over the summer and Sept and most of Oct as well....mainly because I needed the break)<br />
<br />
So one of the things I've been looking at and picking up is Substance Designer. I've had SD for probably 1-2 years now I think but I've never had the time to A) figure it out B ) have a chance to use it, so I figured I would correct that by doing some "research" aka messing around with a small goal in mind.<br />
I originally was going to just try and make a hand painted texture for a model I'm working on (just something small at the moment to get back into the swing of things) and then figured instead of actually painting it all why don't I see if I can actually make use of Substance Designers proceduralness ...since you know...it is one of the reasons to use SD.<br />
<br />
So after playing with it for a few days here and there I've come up with something that is (in my opinion) starting to get close to what I want which in the end is more of a stylized-normal map- texture. I do like the look of it so far and just want to try and add some more knots into it.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://puu.sh/d2GoI/cff912fb7c.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://puu.sh/d2GoI/cff912fb7c.jpg" height="320" width="317" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
I have it now where the floor boards are procedural as well so you can control if it is few or more boards, spacing between, variance of the layout etc.</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Originally it started out as a Stylized/PBR material but I ended up needing to be able to see it in Max 2015 (which as far as I can tell isn't quite up to the PBR stage yet.. :( ) so I grabbed my nodes and put it in a new file for Diff/Spec/Gloss/Norm and this is what I've got so far. Granted I don't know much when it comes to hand painted so not only is the program new to me, the style is new too, but I think it's getting there. Thanks to my girlfriend Jessie Van Aelst who tells me when it sucks and helps me to understand when and why it sucks :P </div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Anyway I have a game idea in mind as well but since I'm not sure on the style I want to make it in yet I'm just kind of messing around till something pops for me I think and we'll go from there :)</div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
T.Out();</div>
TEvashkevichhttp://www.blogger.com/profile/15221987670020160100noreply@blogger.com0tag:blogger.com,1999:blog-8149923399967442517.post-67098063817929605462014-04-30T02:07:00.000-07:002015-04-29T14:52:20.421-07:00Some WPF Treeview Tips/TricksT.StartPost();<br />
<br />
Hey everyone/anyone reading, been a long while but I have just been quite busy with my internship and being a tools code monkey :D It's been pretty fun, interesting and at times, VERY FRUSTRATING.<br />
<br />
Now anyone that has done WPF has probably run into any number of things that wants to make you pull your hair out and flip some tables onto small children, but after many hours searching and trying different things I've come across somethings that are VERY VERY handy for tools in WPF. I'll probably just update this post as I come across more to keep them all in once place but for starters, here is a few things that I've learned to make dealing with the dreaded and yet very powerful TreeView.<br />
<br />
WPF TreeView is probably the best and the most frustrating thing I've had to deal with on a constant basis in the last few months; it's so handy for presenting data in a hierarchical way but there are things that you just can't do directly with TreeView without searching and searching and searching the internet to find the answers to such as:<br />
<br />
<br />
<ul>
<li><span style="background-color: #eeeeee;">How can I force TreeView to change the SelectedItem?</span></li>
</ul>
<ol>
</ol>
<div style="text-align: left;">
Now this I will say has stunned me for a while and I actually JUST found the answer to this problem <a href="http://stackoverflow.com/questions/413890/how-to-programmatically-select-an-item-in-a-wpf-treeview/4080545#4080545" target="_blank">Here on Stack Overflow</a>. So what are we to do here? Well if you're lucky enough to have your project presenting with a inherited model (cause you should be at least using the MVVM programming pattern while doing WPF tools) for your data then you can do this quite easily. You need about 2-3 things,</div>
<div style="text-align: left;">
1. Keep track of your selectedItem via clicks/keyboard navigation </div>
<div style="text-align: left;">
2. Add to your base model type, a property like </div>
<blockquote class="tr_bq">
private bool _isSelected;<br />
public bool IsSelected { get { return _isSelected; } set { Set(ref _isSelected, value); } }</blockquote>
<div>
*NOTE* the Set is just raising INotifyPropertyChanged so how ever you are handling yours is how you should do it here as well *NOTE*</div>
<div>
3. In your treeview, you'll need to have at least this line from the link<br />
<pre class="default prettyprint prettyprinted" style="background-color: #eeeeee; border: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; font-size: 14px; line-height: 17.804800033569336px; margin-bottom: 10px; max-height: 600px; overflow: auto; padding: 5px; vertical-align: baseline; width: auto; word-wrap: normal;"><code style="border: 0px; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif; margin: 0px; padding: 0px; vertical-align: baseline; white-space: inherit;"><span class="pun" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;"><</span><span class="pln" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">Setter Property</span><span class="pun" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">=</span><span class="str" style="background-color: transparent; border: 0px; color: maroon; margin: 0px; padding: 0px; vertical-align: baseline;">"IsSelected"</span><span class="pln" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">
Value</span><span class="pun" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">=</span><span class="str" style="background-color: transparent; border: 0px; color: maroon; margin: 0px; padding: 0px; vertical-align: baseline;">"{Binding IsSelected, Mode=TwoWay}"</span><span class="pln" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;"> </span><span class="pun" style="background-color: transparent; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">/></span></code></pre>
</div>
What this is going to do is allow you to toggle IsSelected in your data Model and since the treeview is bound to it, it will automatically set and be set to IsSelected. Now some people may think, "Why wouldn't you just do it in code behind or something like that?" Well that's because IsSelected is a read-only property, so you can't just set it all willy-nilly like that and from all the proposed ways I've seen so far, this is the easiest to setup.<br />
<br />
This also goes for being able to select what IS and ISN'T expanded in your treeview programmatically, make a property and bind with the Setter in your treeview.<br />
<h2 class="hd" style="background-color: white; color: #222222; height: 1px; overflow: hidden; position: absolute; top: -1000em; width: 1px;">
Search Results</h2>
<br />
<br />
<br />
<div>
<ul>
<li><span style="background-color: #eeeeee;">How to implement a simple and easy to use Search Filter for your TreeView</span></li>
</ul>
<a href="http://www.codeproject.com/Articles/718022/Searchable-WPF-TreeView" target="_blank">Searchable WPF TreeView on Code Project</a></div>
<div>
Thankfully, <span class="author" style="background-color: white; border: 0px; font-family: 'Segoe UI', Arial, sans-serif; margin: 0px; padding: 0px;"><span itemprop="author" itemscope="" itemtype="http://schema.org/Person" style="border: 0px; margin: 0px; padding: 0px; text-decoration: none;"><span itemprop="name" style="border: 0px; margin: 0px; padding: 0px;"><a href="http://www.codeproject.com/script/Membership/View.aspx?mid=4459078" rel="author" style="border: 0px; margin: 0px; padding: 0px; text-decoration: none;">Fredrik Bornander</a>, </span></span></span>Already made a great article on this. If you don't need/want the super fancy search box (was a bit overkill for what I needed) then the really relevant parts of the article are having some more setter properties in your Treeview for<br />
<br />
<pre id="pre1" lang="xaml" style="background-color: #fbedbb; border: 1px solid rgb(251, 237, 187); font-family: Consolas, 'Courier New', Courier, mono; font-size: 9pt; overflow: auto; padding: 6px; white-space: pre-wrap; word-wrap: break-word;"><Setter Property=<span class="code-string" style="border: 0px; color: purple; margin: 0px; padding: 0px;">"</span><span class="code-string" style="border: 0px; color: purple; margin: 0px; padding: 0px;">IsExpanded"</span> Value=<span class="code-string" style="border: 0px; color: purple; margin: 0px; padding: 0px;">"</span><span class="code-string" style="border: 0px; color: purple; margin: 0px; padding: 0px;">{Binding Path=IsExpanded, Mode=TwoWay}"</span> />
<Setter Property=<span class="code-string" style="border: 0px; color: purple; margin: 0px; padding: 0px;">"</span><span class="code-string" style="border: 0px; color: purple; margin: 0px; padding: 0px;">Visibility"</span> Value=<span class="code-string" style="border: 0px; color: purple; margin: 0px; padding: 0px;">"</span><span class="code-string" style="border: 0px; color: purple; margin: 0px; padding: 0px;">{Binding Path=IsMatch, Mode=OneWay, Converter={StaticResource ResourceKey=boolToVisibility}}"</span>/></pre>
</div>
This lets you setup your TreeView to work with a method that you will call in your code that will search through your Data (that is bound to the tree) and set Expanded to true/false and Visibility to true/false as well which will effectively hide anything that doesn't match your results in your textbox and expand open to the result, anything that does match. Much like the IsSelected above, you'll add the IsExpanded and IsMatch(I did IsVisible myself) to your data Model.<br />
<br />
The next important piece of code that you will need is this<br />
<div class="clearfix ui-tabs ui-widget ui-widget-content ui-corner-all" id="codesampletab1" style="background-color: white; border: 0px; color: #111111; font-family: 'Segoe UI', Arial, sans-serif; font-size: 14px; margin: 0px; padding: 0px;">
<div class="ui-tabs-panel ui-widget-content ui-corner-bottom" id="divTab1cs" style="border: 1px solid rgb(242, 242, 242) !important; clear: both; margin: 0px; padding: 10px;">
<pre id="pre12" style="background-color: #fbedbb; border: 1px solid rgb(251, 237, 187); color: black; font-family: Consolas, 'Courier New', Courier, mono; font-size: 9pt; overflow: auto; padding: 6px; white-space: pre-wrap; word-wrap: break-word;"><span class="code-keyword" style="border: 0px; color: blue; margin: 0px; padding: 0px;">public</span> <span class="code-keyword" style="border: 0px; color: blue; margin: 0px; padding: 0px;">void</span> ApplyCriteria(<span class="code-keyword" style="border: 0px; color: blue; margin: 0px; padding: 0px;">string</span> criteria, Stack<TreeNodeViewModel> ancestors) {
<span class="code-keyword" style="border: 0px; color: blue; margin: 0px; padding: 0px;">if</span> (IsCriteriaMatched(criteria)) {
IsMatch = <span class="code-keyword" style="border: 0px; color: blue; margin: 0px; padding: 0px;">true</span>;
<span class="code-keyword" style="border: 0px; color: blue; margin: 0px; padding: 0px;">foreach</span> (<span class="code-keyword" style="border: 0px; color: blue; margin: 0px; padding: 0px;">var</span> ancestor <span class="code-keyword" style="border: 0px; color: blue; margin: 0px; padding: 0px;">in</span> ancestors) {
ancestor.IsMatch = <span class="code-keyword" style="border: 0px; color: blue; margin: 0px; padding: 0px;">true</span>;
ancestor.IsExpanded = !String.IsNullOrEmpty(criteria);
}
}
<span class="code-keyword" style="border: 0px; color: blue; margin: 0px; padding: 0px;">else</span>
IsMatch = <span class="code-keyword" style="border: 0px; color: blue; margin: 0px; padding: 0px;">false</span>;
ancestors.Push(<span class="code-keyword" style="border: 0px; color: blue; margin: 0px; padding: 0px;">this</span>);
<span class="code-keyword" style="border: 0px; color: blue; margin: 0px; padding: 0px;">foreach</span> (<span class="code-keyword" style="border: 0px; color: blue; margin: 0px; padding: 0px;">var</span> child <span class="code-keyword" style="border: 0px; color: blue; margin: 0px; padding: 0px;">in</span> Children)
child.ApplyCriteria(criteria, ancestors);
ancestors.Pop();
}
</pre>
</div>
</div>
<div style="background-color: white; color: #111111; font-family: 'Segoe UI', Arial, sans-serif; font-size: 14px;">
The method that determines if this node is a match is in this article a simple string comparison;</div>
<div class="pre-action-link" id="premain14" style="background-color: white; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-width: 0px 0px 1px; color: #005782; font-family: 'Segoe UI', Arial, sans-serif; font-size: 11px; margin: 0px; padding: 0px; text-align: right;" width="100%">
<img src="http://www.codeproject.com/images/minus.gif" height="9" id="preimg14" preid="14" style="border: 0px; cursor: pointer; height: auto; margin: 0px; max-width: 100%; overflow: auto; padding: 0px;" width="9" /><span id="precollapse14" preid="14" style="border: 0px; cursor: pointer; margin: 0px; padding: 0px;"> Collapse</span><span style="border: 0px; margin: 0px; padding: 0px;"> | </span><a href="http://www.codeproject.com/Articles/718022/Searchable-WPF-TreeView#" preid="14" style="border: 0px; color: purple; margin: 0px; padding: 0px; text-decoration: none;">Copy Code</a></div>
<pre id="pre14" lang="cs" style="background-color: #fbedbb; border: 1px solid rgb(251, 237, 187); font-family: Consolas, 'Courier New', Courier, mono; font-size: 9pt; overflow: auto; padding: 6px; white-space: pre-wrap; word-wrap: break-word;"><span class="code-keyword" style="border: 0px; color: blue; margin: 0px; padding: 0px;">private</span> <span class="code-keyword" style="border: 0px; color: blue; margin: 0px; padding: 0px;">bool</span> IsCriteriaMatched(<span class="code-keyword" style="border: 0px; color: blue; margin: 0px; padding: 0px;">string</span> criteria) {
<span class="code-keyword" style="border: 0px; color: blue; margin: 0px; padding: 0px;">return</span> <span class="code-sdkkeyword" style="border: 0px; color: #339999; margin: 0px; padding: 0px;">String</span>.IsNullOrEmpty(criteria) || name.Contains(criteria);
}</pre>
The methods will check for anything matching the searchText you give it (I hooked up an extra method from my codebehind that when the text changes in my textbox, call the method which passes the text to the Apply Criteria.) and expand or hide accordingly. <br />
<br />
*NOTE* if you want to make the search just a bit more functional change the IsCriteriaMatched to<br />
name.ToLower().Contains(criteria.ToLower()); This will make it that no matter if you have say Matilda or matilda, it will still show up if you gave the search box MaTilDa for example *NOTE* <br />
<br />
The only change to this method that I really made was that I also pass the current node you're checking so you can get the name of the node like<br />
<br />
<br />
<pre>private bool IsCriteriaMatched(string criteria, NodeWithName check)
{
return String.IsNullOrEmpty(criteria) || check.Name.ToLower().Contains(criteria.ToLower());
}
</pre>
<pre></pre>
The only part left is in your WPF you have a textbox and choose whether you want it live filtering (as the user types it filters) or keypress filtering (hit enter, it does the search) and make sure that you save/bind to the textbox text in a viewmodel (pretty much the same place you do the above search methods is as good a place as any)<br />
<br />
Those are the two biggest things that I've run into and it's taken a while to find good working answers to (I've never used the Setter myself before this so it was a good experience to learn that I could bind to it).<br />
<br />
Hopefully people stumble across this post and find these answers instead of searching for a long time.<br />
<br />
T.Out();TEvashkevichhttp://www.blogger.com/profile/15221987670020160100noreply@blogger.com0tag:blogger.com,1999:blog-8149923399967442517.post-22535454198296456002014-03-03T05:17:00.000-08:002014-03-06T00:53:57.098-08:00WPF and Child Code...T.StartPost();<br />
<br />
Just a quick post because you never know who might need to do something like this as well (and maybe this can save them a few days of trying stuff/searching for different things/implementing things that don't work...)<br />
<br />
So while making a tool for my internship, I had to implement a UI that would display data in a parent/child relationship. Ok, shouldn't be to bad, but the thing is that it could also have the same parent data in a list as well.<br />
<br />
After trying for a while to get this setup to work I finally got something that displayed correctly by just getting the object and stripping the strings from it and displaying that and then more or less "discarding" the object (not discarding but not saving it in my UI for retrieval)<br />
<br />
Then I was told we would be able to get things back by the unique ID that they would have (which also put me in a pickle because I wasn't using a Unique ID in my test data...Where I thought this might save me, it put me deeper into the, "Oh crap, how am I going to get the object back and get that ID?"<br />
<br />
This is where StackOverflow came in to save the day...finally...after a week of searching different questions on there haha.<br />
<br />
<a href="http://stackoverflow.com/questions/1912481/wpf-treeview-hierarchicaldatatemplate-binding-to-object-with-multiple-child-co?answertab=votes#tab-top">http://stackoverflow.com/questions/1912481/wpf-treeview-hierarchicaldatatemplate-binding-to-object-with-multiple-child-co?answertab=votes#tab-top</a><br />
<br />
This answer is the answer that finally gave me the puzzle piece to get my Data Object into the UI as well as being able to get it back after (instead of just getting the strings and displaying that.)<br />
<br />
Hopefully someone can find this helpful cause man that took way to long to get that to work..I must have tried over 15 different ways to do the datatemplates and none of them worked till this one so yeah.<br />
<br />
Edit:<br />
<br />
One thing to note as well, when doing the data templates, if you're doing it in a treeview like I am/the example as well, you don't want to put a TreeViewItem into the datatemplate if you want to be able to click on the text to get selection. I didn't realize I had done this till yesterday and was trying to figure out why you had to click on this tiny spot between the > and the text. Apparently TreeView automatically wraps whatever you put in the template in a TreeViewItem anyways so you can just display with textblock/label etc. etc.<br />
<br />
T.Out();<br />
<br />
<br />TEvashkevichhttp://www.blogger.com/profile/15221987670020160100noreply@blogger.com0tag:blogger.com,1999:blog-8149923399967442517.post-648731856535633992014-02-11T03:43:00.001-08:002014-02-11T03:43:38.950-08:00Let the work begin!T.StartPost();<br />
<br />
So, with the finishing of the last semester (my final semester with in class courses) it fades into the distance and the new semester begins and with it brings ..."The Internship"<br />
<br />
An exciting and scary adventure awaits me in the coming months. I'm elated that I'm able to do my internship with the fellows over at Conatus Creative, who are doing River City Ransom : Underground.<br />
The original River City Ransom game (Street Gangs for EU) was a game on the NES that really is in the top 5 of my favorite games of all time. The amount of time I've spent beating the gangs up in that game is ridiculous.<br />
<br />
RCR:U is the first licensed sequel to RCR and also first to be developed by a western developer (there are a lot of other games in the RCR lineage in Japan), so the fact that I can work on this is amazing to me. I'm super excited to be apart of this project and of course a bit scared to be working on an IP that I've loved for so long.<br />
<br />
I just got back from our school trip to the US/Canada where we got to go on some tours to places like Valve, ArenaNet and EA (Vancouver). Was fun to be on that side of the pond again, even if for only 10 days ish.<br />
<br />
Well, back to work now.<br />
<br />
T.Out();<br />
<br />
<br />
<br />TEvashkevichhttp://www.blogger.com/profile/15221987670020160100noreply@blogger.com0tag:blogger.com,1999:blog-8149923399967442517.post-55056932199488144012013-11-29T14:29:00.001-08:002013-11-30T10:47:11.621-08:00Unity, Localization and oh so much anger...T.StartPost();<br />
<br />
Unity.<br />
<br />
So powerful, pretty easy to use and so annoying when something breaks.<br />
<br />
For the game we're making in our Integration Projects 3 class, we are making our game in Unity. The class states that the game has to be localized for English, Dutch, French and German, as well as Win 8 Store ready.<br />
<br />
We thought everything was A-OK till this last week when we went to do a Win 8 build (cause the school finally got the tablets for us to test on...) and that's when we found out something that hinges our whole localization code and throws it in the the garbage...<br />
<br />
Since our game is going to be using quite a bit of text we decided to spend some time making sure our localization would work flawlessly from the start instead of going back and doing it after (since that seems like a dumb idea anyway...)<br />
<br />
So we came up with a system that is basically as follows:<br />
<br />
One class - GlobalData -> basically keeps track of what language the game should be in.<br />
<br />
Holds an Enum,<br />
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkMXVe8Cjk3ViDYPU_garyAoxPo5rHAbG1UCcdg1w0x36hdGA5BSm8MRtQnAuL5aQbs7XubDdiSiN5JZQDc3pM3Lg_ywNOFtmVJGwaf4Ut8LkV7nJLBEGj1ZdcUtHAcfmI166_sxOI1Aix/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> LanguageEnum {English, Nederlands, French, German}
</code></pre>
<br />
and an int that is CurrentLanguage which of course keeps track of our language by casting the LanguageEnum to an int and storing it.<br />
<br />
Then for each class that will have text in it, we have an xml file with a pretty basic structure that is like this:<br />
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkMXVe8Cjk3ViDYPU_garyAoxPo5rHAbG1UCcdg1w0x36hdGA5BSm8MRtQnAuL5aQbs7XubDdiSiN5JZQDc3pM3Lg_ywNOFtmVJGwaf4Ut8LkV7nJLBEGj1ZdcUtHAcfmI166_sxOI1Aix/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> <?xml version="1.0" encoding="utf-8"?>
<MainMenu>
<Title>
<Eng Text="Main Menu"/>
<Nl Text="Hoofdmenu"/>
<Fr Text="Menu Principal"/>
<Ger Text="Hauptmenü"/>
</Title>
<NewGame>
<Eng Text="New Game"/>
<Nl Text="Nieuw Spel"/>
<Fr Text="Nouveaux Jeu"/>
<Ger Text="Neues Spiel"/>
</NewGame>
</MainMenu>
</code></pre>
<br />
Then in our class with text we have two things, another Enum that corresponds with the Elements in our xml such as:<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkMXVe8Cjk3ViDYPU_garyAoxPo5rHAbG1UCcdg1w0x36hdGA5BSm8MRtQnAuL5aQbs7XubDdiSiN5JZQDc3pM3Lg_ywNOFtmVJGwaf4Ut8LkV7nJLBEGj1ZdcUtHAcfmI166_sxOI1Aix/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> public enum MenuStringKey
{ Title, NewGame, Controls, Options, Credits, Exit }
</code></pre>
<br />
And a public void LoadStrings(); method which is as follows:<br />
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkMXVe8Cjk3ViDYPU_garyAoxPo5rHAbG1UCcdg1w0x36hdGA5BSm8MRtQnAuL5aQbs7XubDdiSiN5JZQDc3pM3Lg_ywNOFtmVJGwaf4Ut8LkV7nJLBEGj1ZdcUtHAcfmI166_sxOI1Aix/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> // Open Xml Document with tranlations.
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(@"Assets\Localization\MenuText.xml");
// Loop over all needed option strings. (By looping over OptionStringKey enums.)
foreach (MenuStringKey neededStr in Enum.GetValues(typeof(MenuStringKey)))
{
// Get all possible translations for the needed string.
XmlNodeList languageList = xmlDoc.GetElementsByTagName(neededStr.ToString());
// Get needed translation.
foreach (XmlNode translations in languageList)
{
//Get the attribute that goes with the localization.
MenuStrings.Add(neededStr, translations.ChildNodes.Item((int)GlobalData.CurrentLanguage).Attributes["Text"].Value);
}
} </code></pre>
<br />
We store our localized strings in a Dictionary of <br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkMXVe8Cjk3ViDYPU_garyAoxPo5rHAbG1UCcdg1w0x36hdGA5BSm8MRtQnAuL5aQbs7XubDdiSiN5JZQDc3pM3Lg_ywNOFtmVJGwaf4Ut8LkV7nJLBEGj1ZdcUtHAcfmI166_sxOI1Aix/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> Dictionary<MenuStringKey, string>
</code></pre>
<br />
Or whichever Enum it is.<br />
<br />
And whenever we wanted to get the localized string it is just<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkMXVe8Cjk3ViDYPU_garyAoxPo5rHAbG1UCcdg1w0x36hdGA5BSm8MRtQnAuL5aQbs7XubDdiSiN5JZQDc3pM3Lg_ywNOFtmVJGwaf4Ut8LkV7nJLBEGj1ZdcUtHAcfmI166_sxOI1Aix/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> MenuStrings[MenuStringKey.Title] //Gets the corresponding string in whichever language
</code></pre>
<br />
We had to do our loading with relative paths as for some reason, Resources didn't want to work us before (it does in our new code but it didn't back then...)<br />
<br />
This also made another problem we didn't at first notice, because we're referring to the assets/localization folder, we also have to copy that folder structure over to the build else, no text, no working game.<br />
<br />
But hey, not a big deal right?<br />
<br />
Well, this was working fine for us up till this week, as I said before. When we went to build for Win 8 app store, we found that XmlDocument and friends are not supported...Great...<br />
Just GREAT...<br />
<br />
So now we have to figure out how to get our xml reading to work again with XDocument which is actually what I wanted to use in the first place but at the time (only a few weeks ago) Unity didn't support which is why we had to use the xmlDocument instead of XDocument and LINQ (which is sooo much nicer)<br />
<br />
So after messing around and trying to get used to XDocument and LINQ again, I have finally come up with an actually, even more elegant solution which solves 2 problems for us.<br />
<br />
It solves the having to copy over the folder structure as well as our xml loading problems.<br />
<br />
<br />
So we still have the same setup with the enums and such, the only change I have made is in the GlobalData one by changing it from the original (see above) to
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkMXVe8Cjk3ViDYPU_garyAoxPo5rHAbG1UCcdg1w0x36hdGA5BSm8MRtQnAuL5aQbs7XubDdiSiN5JZQDc3pM3Lg_ywNOFtmVJGwaf4Ut8LkV7nJLBEGj1ZdcUtHAcfmI166_sxOI1Aix/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> LanguageEnum {Eng, Nl, Fre, Ger}
</code></pre>
This makes it so when we use it for LINQ it auto finds the same tag in our XML.<br />
<br />
So I changed our LoadStrings to<br />
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkMXVe8Cjk3ViDYPU_garyAoxPo5rHAbG1UCcdg1w0x36hdGA5BSm8MRtQnAuL5aQbs7XubDdiSiN5JZQDc3pM3Lg_ywNOFtmVJGwaf4Ut8LkV7nJLBEGj1ZdcUtHAcfmI166_sxOI1Aix/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> var textAsset = (TextAsset)Resources.Load("Localization/MenuText");
var doc = new XDocument(XDocument.Parse(textAsset.text));
var root = doc.Root;
foreach (MenuStringKey neededStr in Enum.GetValues(typeof(MenuStringKey)))
{
MenuStrings.Add(neededStr,
root.Element(neededStr.ToString()).Element(GlobalData.CurrentLanguage.ToString()).FirstAttribute.Value);
}
</code></pre>
Now there is a few things I can say about this chunk of code besides it being one foreach instead of 2 and actually one line :P<br />
<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkMXVe8Cjk3ViDYPU_garyAoxPo5rHAbG1UCcdg1w0x36hdGA5BSm8MRtQnAuL5aQbs7XubDdiSiN5JZQDc3pM3Lg_ywNOFtmVJGwaf4Ut8LkV7nJLBEGj1ZdcUtHAcfmI166_sxOI1Aix/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> var textAsset = (TextAsset)Resources.Load("Localization/MenuText");
</code></pre>
<br />
This is using the Resources of Unity. What is Resources? It's a folder called Resources inside your Assets folder. It apparently is quite handy for a lot of things not only limited to loading text files and such.<br />
<br />
So I moved our localization folder from the Assets into our Resources folder. I kept it in our Localization folder just cause you never know what else we're gonna throw in there (order and stuff...)<br />
<br />
So for resource loading of xmls, you don't put the .xml, just the file name and Unity will actually look where you tell it and find the file that matches what you want. I tested because some documentation says you can just say the file name and it will search ALL folders in your resources folder but this seems to not be completely true, so be warned that if you have a sub folder, make sure you are including that folder name in your path as well like above.<br />
<br />
The second thing is<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkMXVe8Cjk3ViDYPU_garyAoxPo5rHAbG1UCcdg1w0x36hdGA5BSm8MRtQnAuL5aQbs7XubDdiSiN5JZQDc3pM3Lg_ywNOFtmVJGwaf4Ut8LkV7nJLBEGj1ZdcUtHAcfmI166_sxOI1Aix/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> var doc = new XDocument(XDocument.Parse(textAsset.text));</code></pre>
Which was actually a pretty annoying thing to get figured out. &nbsp;A lot of online sources say use XDocument.load which doesn't seem to work. I did finally stumble across someone saying doing this current line which made it work correctly.
</code></pre>
<br />
Now for our XML structure, we only have the one attribute in our Element which is the text for that language.<br />
<pre style="background-image: URL(https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkMXVe8Cjk3ViDYPU_garyAoxPo5rHAbG1UCcdg1w0x36hdGA5BSm8MRtQnAuL5aQbs7XubDdiSiN5JZQDc3pM3Lg_ywNOFtmVJGwaf4Ut8LkV7nJLBEGj1ZdcUtHAcfmI166_sxOI1Aix/s320/codebg.gif); background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> MenuStrings.Add(neededStr,
root.Element(neededStr.ToString()).Element(GlobalData.CurrentLanguage.ToString()).FirstAttribute.Value);
.
</code></pre>
Since this is inside our ForEach, we check for each Enum that is in MenuStringKey and try to find the element that corresponds with it and then finding the element in that one that corresponds to our CurrentLanguage and then finally the attribute which is the Text="" part
<br />
This works quite nicely and actually makes it so we can keep all the other code (so far, I do have to check to make sure it will Build for Win 8 after I get this all re done in the other classes...)for the actual using of our text and such, which is great.<br />
<br />
I'll do an edit when I've found out if this will completely fix our build problem.<br />
Thanks for reading and hopefully this has helped someone :D<br />
<b><i>EDIT:</i></b><br />
This code has made it so I was able to make a Win 8 App store build with no problems. Cheers, hope it helps.<br />
<br />
T.Out();<br />
<br />
<br />TEvashkevichhttp://www.blogger.com/profile/15221987670020160100noreply@blogger.com0tag:blogger.com,1999:blog-8149923399967442517.post-84609125058054454692013-10-25T12:48:00.000-07:002013-10-25T12:48:51.252-07:00Still got them, problemsT.StartPost();<br />
<br />
So it's been awhile yet again since my last post. <br />
<br />
Been working on a shader to replicate an old CRT for HLSL shader model 3 for XNA 4.0. There's of course some strange stuff that I didn't know about XNA 4.0, such as if you make a shader that only implements the pixel shader, the spritebatch (which I am using for this shader as it's all post processing) will make a ShaderModel 2.0 vertex shader to pass things through. This wouldn't be a problem if there wasn't s 64 instruction limit on pixel shaders math calculations. A shader I found to base myself on for the start of the scan lines goes over that limit and of course the poster even said, "Fixed it by putting it on shaderModel 3."<br />
<br />
Now the problem with that is if you just put your pixel shader on 3.0 and still don't define a vertexShader of 3.0 as well, XNA will give you a compilation error which basically says "Fool, you're trying to mix a VertexShader of ShaderModel 2 with a PixelShader of ShadeModel 3...You duuuumb."<br />
<br />
I had to search for a couple different things to finally come across a way of just passing everything through the VertexShader to not affect the outcome of the post processing (if you try to just do something like pass the input position to the output in the vertexShader, it will give you a one color screen instead of what you want.). Thankfully someone has already done a great service by figuring out a way to make a pass through without affecting the actual image (much, he claims it might make it a bit blurry but I don't really see it)<br />
<br />
<a href="http://gamedev.sleptlate.org/blog/165-implementing-a-pass-through-3vertex-shader-for-games-without-vertices/">http://gamedev.sleptlate.org/blog/165-implementing-a-pass-through-3vertex-shader-for-games-without-vertices/</a><br />
<br />
A few lines of code later and you've got a model 3 vertex shader that passes through and doesn't mess with your pixel shader. So I got that working...And then I found out I needed to actually be working on this for GLSL so here goes nothing (with learning GLSL/OpenGl) and trying to paste some shaders together and check their performance<br />
<br />
UNITY PROBLEMS<br />
<br />
Something else that has popped up is Unity and XML reading. Now I figured since we're using the C# scripting it would be just regular C# that I could use to read it all in and work with it. I figured hey, I like LINQ and I've gotten quite a bit of experience working with it and XML together in my P90X WoT project so we'll just use that for our localization and be done with it.<br />
<br />
Oh How Wrong Was I. Unity doesn't use a high enough C# version to access XDocument which is what I had done all my previous work with so I had to scour the internet to find a new way to do it and after researching...and, you guess it, PROBLEMS GALORE, I finally have it working.<br />
<br />
One of the pages about XML loading and Unity I found was this,<br />
<a href="http://unitynoobs.blogspot.be/2011/02/xml-loading-data-from-xml-file.html">http://unitynoobs.blogspot.be/2011/02/xml-loading-data-from-xml-file.html</a><br />
<br />
Which almost worked for me. Some of the code was needed for me to get it working again but one of the lines that did give me errors no matter what is this one<br />
<br />
<pre> Line 29 xmlDoc.LoadXml(GameAsset.text); // load the file.
</pre>
<br />
I found a bunch of things about how when you save XML as UTF-8 it sometimes adds a BOM (Byte Order Mark) which Unity reads as white space. It's supposed to be in there to let things know what the endianess of the code is but Unity just reads it as white space and will actually just say, "NO". So after probably a literal hour or two searching and trying different solutions all to no avail, I tried something else which I originally didn't know was there....<br />
<br />
If you do xmlDoc.Load(GameAsset.text);<br />
<br />
It will go without a hitch and load it. Strange but it works and I curse it every time I look at it.<br />
<br />
LOCALIZATION PROBLEMS<br />
<br />
I'm just starting with localization for the first time and we're going to be developing a text heavy game (dialogues for characters and their actions and progress reports etc. etc.) which has to be localized from English to Dutch, French and German as well...Now that the XML is loading finally we can start on things because we felt that we had to get this in place before we even started developing the game. I feel it's a good thing because if I would have to go back and change all this stuff to load different things based on languages I'd probably rip my hair out and throw myself through a wall..<br />
<br />
But anyways, that's all my problems for now.<br />
<br />
T.Out();<br />
<br />
<br />
<br />
<br />
<br />TEvashkevichhttp://www.blogger.com/profile/15221987670020160100noreply@blogger.com0tag:blogger.com,1999:blog-8149923399967442517.post-64138564854056855412013-09-01T20:12:00.000-07:002013-09-01T20:12:08.973-07:00Oh long and busy summer...T.StartPost();<br />
<br />
Oh long time no write.<br />
<br />
So it's been quite a while since I posted...sorry, but I have been pretty busy as of late.<br />
Since it summer, it is my time to work..as much as possible. This summer I'm being a pipeliner in the oil and gas industry (yeah, makes sense right and isn't a complete and polar opposite of what I go to school for right?) which is a definite go go go job most of the time, 12 hour shifts for 21 days straight...so you can see why I've been busy.<br />
<br />
But anyways I have been doing some Youtube videos here and there throughout the summer as well as semi-"apprenticing" a few people on 3D techniques and the work flow for making game ready models (sometimes it's pretty hard getting ideas through haha)<br />
<br />
I figured I would make a small update about myself to make sure that anyone that does happen across this doesn't think I'm dead to the world, because "I'm Not Dead Yet!" (Quest for the Holy Grail - anyone?)<br />
<br />
Some stress outside of the work is looking for the internship I'll need in my second semester this year so I can end up graduating from ma, edu-mi-cation ;)...I've been finding it's next to impossible finding an internship as a Technical Artist, which is somewhat disheartening. Might have to go for 3D or gameplay...or even just tools dev I guess, we'll see what ole fate gives me.<br />
<br />
If for some reason you can't find my youtube channel, you can find it at<br />
<a href="http://www.youtube.com/user/TJE3">http://www.youtube.com/user/TJE3</a><br />
where I uploaded some stuff I did this year as well and some videos that I've been uploading about some 3D tips/Tricks (and a forth coming series on the quick and dirty workflow )<br />
<br />
<br />
Well I guess that it's for now,<br />
<br />
T.Out();<br />
<br />TEvashkevichhttp://www.blogger.com/profile/15221987670020160100noreply@blogger.com0tag:blogger.com,1999:blog-8149923399967442517.post-20316396984243515282013-04-01T12:51:00.001-07:002013-04-01T12:52:44.515-07:00Some updatesT.StartPost();<br />
<br />
So I wanted to do another blog post a little while ago but just couldn't get what I wanted to say, down in text. This time it's a bit different haha, this is some updates about life in general I guess and some other things as well.<br />
<br />
One thing I wanted to talk about is the new program I put out, P90X Workout Tracker Program.<br />
You can find it here <a href="http://travisevashkevich.infectedreviews.com/conc/index.php/progs/p90xworkouttracker/">P90X Workout Tracker Program</a><br />
<br />
PWT is a program to be used with P90X the crazy home workout program. With P90X it's pretty much drilled into you that you need to record your results so you can see what you did last time to improve the next time. In my Tools Development class I had to make a program that fit with a lot of C#/WPF principles (MVVM patterns and LINQ and such like that) so I decided to make a program that I would end up using later, the PWT.<br />
<br />
Having just started up P90X again today, I came across one thing I need to update in this version (as a minor tweak) and that's make it so the program will accept text and not just numbers in the reps area so you can say how many kg's/lbs or what color of band you did etc, so that will be in a update pretty soon I hope.<br />
<br />
Other than that, it's been some updates to my portfolio site as well as making a spot to host the program.<br />
I've been kind of educating some people on The Dead Linger forums on how to model and texture things better than they currently have been which is kinda fun cause I get to see some results already as they progress.<br />
<br />
I'll post when I make updates to the program as well as other stuff I remember I wanted to post about, later on.<br />
<br />
T.Out();<br />
<br />
<br />TEvashkevichhttp://www.blogger.com/profile/15221987670020160100noreply@blogger.com0tag:blogger.com,1999:blog-8149923399967442517.post-85161122007567152652013-02-14T13:35:00.000-08:002013-02-14T13:47:51.678-08:00Finally Catching Up: Pt 2T.StartPost();<br />
<br />
So, in the last post, I covered the 3D stuff I've been up to, as well as shared the game that I helped make with other members of my team.<br />
<br />
Now it's onto some other stuff where it's been more organizing and talking...and talking...... .... and talking that I've been doing.<br />
<br />
<b>RADIO SHOW:</b><br />
I actually just realized that I never did write the post that I thought I had about the radio show so...this is a little awkward since I thought I had posted about it. But here it goes, a little selfish self promoting is in order!<br />
<br />
Last year I was approached about being the host for a radio show here in Belgium to which I obviously said, "You want to put my silly ass on the radio?" and even after that they still wanted to. Although the radio show we do is completely different from the original show that was mentioned to me (interviewing other foreign people like myself about their time in Belgium and travels etc) it's been fun just getting people to come around and talk about games and trying to make people actually think about the games they are playing (or even not playing).<br />
<br />
So the Radio Show goes by the name of <b>LEVEL UP</b>. You can find our facebook page here<br />
<br />
<br />
<a href="https://www.facebook.com/QuindoLevelUp">https://www.facebook.com/QuindoLevelUp</a><br />
<br />
This is where we post our teasers, photos and other stuff that pertains to Level Up. Since we are about to air our 9th Episode (Yea I'm that far behind on actually documenting it here that I even had a show...that we're now about to air the 9th....) that means you've missed out on the last 8, which you can never hear unfortun...JUST KIDIIIIING, you can still hear them because we put them online on MixCloud as well<br />
<br />
<a href="http://www.mixcloud.com/search/?mixcloud_query=quindo%20level%20up">http://www.mixcloud.com/search/?mixcloud_query=quindo%20level%20up</a><br />
<br />
This is the link to find any of the previous and upcoming shows. I hope that people enjoy the shows because it has been fun making them. Really, I never thought I would enjoy talking for so long on something that people could actually hear me on...It's one of those things I've always been kind of weirded out about haha, but anyways it seems to have passed.<br />
<br />
The fun part for me (and also the hardest and most stressful part) is trying to get a hold of industry people for Industry Talk. It's fun talking to the professionals about our topics for the show and seeing what they think cause sometimes you receive even more thought provoking things such as on the Game Addiction Episode when I got to interview <a class="g-profile" href="http://plus.google.com/103798642016073411418" target="_blank">+James Portnow</a> , a game designer and writer for Extra Credits over at Penny Arcade.<br />
<br />
But anyways, I guess it's time to do the brief part of the post about the last little project that I was doing for the last year and a half now which has also grown to be bigger than I initially planned.<br />
<br />
<b>STUDY NIGHT:</b><br />
So Study Nights...It's exactly what it sounds like but since DAE didn't have a formal study night for people to kind of come together and give opinions on projects, work and socialize together (which we ALL benefit from) which I still don't know if it's because of DAE's kind of "recluse" nature that the students end up with because of the amount of work and projects that are due or what, but, I decided to try and bring people together.<br />
<br />
Study Night actually started out last year (in my second year, 2011/2012 year). I decided that since, now that we were the second year of the international classes of DAE we should help out the new first years to hopefully help them pass with a higher ratio than we had. Since we (And I) still think that one of the reasons we didn't have a good ratio is because we had no one above to help us really as we were kind of like the smelly kid in school, the Dutch classes didn't really want anything to do with us because they thought we were doing the English side for special treatment (Even the teachers thought it too, whether or not they will admit it though...) which we never received.<br />
<br />
Anyways, As I said, I was trying to just make the Internationals look a little less bad cause our pass ratio sucked ...real bad in the first year of it running. At the time, I did have the odd Dutch side person that wanted to come but I decided that if they wanted to treat us like we were different in the first year, we could do the same with our new Study Night as well. They never made the effort (for the most part, as there of course is some of the Dutch side that were and still remain to be really cool about us being in the other class) to include us in stuff so I wasn't about to do the same for them <b>AND MAINLY</b> because I didn't want to plan something for a ton of people, we had about 45 people with the first and second years. <br />
<br />
I saw that this had actually improved the pass rate (whether that year just had better and more studious people, I'll never really know cause I can't run the same people through it twice ...and I lack a Time Machine (although I do have a book on it now.. <.< >.>)) of the people that attended because we could help the people that needed the help.<br />
<br />
This year (2012/2013) I decided to take the plunge (mainly cause I'm kind of an idiot and in the intro day of the year, I was giving a speech with our program coordinator, Rik Leenknegt and I meant to actually just say that the internationals in the room (as the plan originally was that the Intl and the Dutch would be two talks and I was to talk to the Intl's...but they put them together...), I was going to run the study night for them again...but I didn't have the heart so I said I would try to run it for everyone this year...I cursed myself later for saying it and not checking into anything before hand...) and try and run it for everyone. I tried a few times just doing it where we had always had it prior, The Studios. This proved to be pretty ok for about 2 sessions then it started to grow..and we ran out of plugs and chairs.<br />
<br />
So at this point I didn't have much choice but to ask Rik if we could hold it at the school and he pointed me to the head of infrastructure at Howest and we arranged to have it in the school cafeteria since it has lots of space and we can take the plugs from the art room to make it accessible for more. I was approached by a few people that said they wanted to help with Study Night so I said ok and now the team consists of two teachers and two students.<br />
<br />
Stijn Grooten and myself were interviewed by one of Belgiums Newspapers about Study Night and why it seems that it had to be started by a Canuck and someone hadn't already started it.<br />
(<a href="http://www.nieuwsblad.be/article/detail.aspx?articleid=DMF20130107_00424985">http://www.nieuwsblad.be/article/detail.aspx?articleid=DMF20130107_00424985</a> Here's the link but it's in Dutch just saying)<br />
<br />
Now we run Study Night every week and try to also get more and more teachers to drop by when there are big projects coming up for due dates to give last minute feedback and it seems to be pretty appreciated (which is all I can ask for I guess)<br />
<br />
I must say that I'm just happy people like it and find it useful.<br />
<br />
Well now that that is all rambled out. You're pretty much caught up with my last semester and year of stuff I guess.<br />
<br />
Thanks for reading/skimming.<br />
<br />
T.Out();TEvashkevichhttp://www.blogger.com/profile/15221987670020160100noreply@blogger.com0tag:blogger.com,1999:blog-8149923399967442517.post-5556412737998546112013-02-14T12:52:00.000-08:002013-02-14T13:38:10.980-08:00Finally Catching Up: Pt 1T.StartPost()<br />
<br />
Soooooo...I was going to update this a bit ago...then I got into school work, the radio show (having to not only do the show but try and coordinate with industry professionals to do the Industry Talk portion of it...not the easiest thing..) organizing Study Nights for the whole of Digital Arts and Entertainment...Yea it's been busy. Now that I have some time with the new semester start (and a bout of a throat infection, bronchitis and only 2 days of school) I can catch up with what I've been doing since the last one...Buckle up. It's going to be a long one. Think I might split the updates into 2 posts (at least)<br />
<br />
<br />
<b>3D </b><br />
<b><br /></b>
3D wise, here's what I've been up to. I finished this vehicle for my exam.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXD0I-96lAwZl3VAcmmxALpC9KM6adKJB3JbLn85ytHnkWpx91v0duACFhWML-T4WfOu6-_XA2lHcISPtUmj7ENfOzJocBPB1prcqcCyr3DRKVbzyMwC3UavZCbQ5dVaC6QuhA76R7-tjO/s1600/2DAE_EvashkevichTravis_Presentation3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="322" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXD0I-96lAwZl3VAcmmxALpC9KM6adKJB3JbLn85ytHnkWpx91v0duACFhWML-T4WfOu6-_XA2lHcISPtUmj7ENfOzJocBPB1prcqcCyr3DRKVbzyMwC3UavZCbQ5dVaC6QuhA76R7-tjO/s640/2DAE_EvashkevichTravis_Presentation3.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJGf45pTg3LXuUsfOVCe1mE8tams0lajGcg1b_rTKASWA7kztBUvpEhJn16bk7qvJJR9x3GdPJDtTcZkBEpfC6t47jPa8gytTPR7eT57SMGnYOJ4mEvBCy1g8YurjR7om24-MaHJyDR-Ds/s1600/2DAE_EvashkevichTravis_Presentation2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="322" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJGf45pTg3LXuUsfOVCe1mE8tams0lajGcg1b_rTKASWA7kztBUvpEhJn16bk7qvJJR9x3GdPJDtTcZkBEpfC6t47jPa8gytTPR7eT57SMGnYOJ4mEvBCy1g8YurjR7om24-MaHJyDR-Ds/s640/2DAE_EvashkevichTravis_Presentation2.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBdgcVBeDn_9Uj9gib9T2bZv9gBcDPtQ8r5awAmRQqnmvKrum9LdECPnwjoK3li-BggfhjP-UtxGqG_doGDpzxeeYVb9IZgpzQShG97-lRjUOLO5Oi-5vNT1Ur-1waG29d0zQdyvrvoBhe/s1600/2DAE_EvashkevichTravis_Presentation1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="322" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBdgcVBeDn_9Uj9gib9T2bZv9gBcDPtQ8r5awAmRQqnmvKrum9LdECPnwjoK3li-BggfhjP-UtxGqG_doGDpzxeeYVb9IZgpzQShG97-lRjUOLO5Oi-5vNT1Ur-1waG29d0zQdyvrvoBhe/s640/2DAE_EvashkevichTravis_Presentation1.png" width="640" /></a></div>
<br />
<br />
Before the Vehicle project, we had to make a gun, originally we were going to have to make a gun based on designs from the art side of our program and right before we had to pick it was opened up that we could do either (as some of the art designs were ...*cough*unrealistic and stupid *uncough*). Anyways, I chose to go with the artist design and it was fun to do. I had to make some modifications to the original design due to how the gun itself is actually put together but overall it was good.<br />
<br />
The tri count might be a bit high on it but it was also modeled to be snapped open and reloaded (instead of just shoving the harpoons down the barrel with the charges attached (which doesn't make much sense to me but hey, never know I guess)<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLYDhAUX6ugxg44KDimEKRJ_D5ezbmPpGVPxQZRajwKDH8RlzD2NnkbniHIeYDzwsrWRfi18Jg0Nyfn6baVaxeH0o9olSlERQXMPhbQbpp99Z0m5IwThVgduKym0Leebzf3-J_f5jt7U0E/s1600/BeautyRenderLOW.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLYDhAUX6ugxg44KDimEKRJ_D5ezbmPpGVPxQZRajwKDH8RlzD2NnkbniHIeYDzwsrWRfi18Jg0Nyfn6baVaxeH0o9olSlERQXMPhbQbpp99Z0m5IwThVgduKym0Leebzf3-J_f5jt7U0E/s640/BeautyRenderLOW.jpg" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAYx5zZnETd_SOIBcIDQw2J3z_bNIFRi-4A6ZqNPjE6wqqEPGk_uxrrfI3IJhmvJgn3r_WWu4ki-2VjWiTBWOYEBgTPAaNB2ehDoMWS1wfF9roIMw-Td6Ryj9Ap4snN8i4gdC1aWEtW3-u/s1600/LowPolyBeautyRender.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAYx5zZnETd_SOIBcIDQw2J3z_bNIFRi-4A6ZqNPjE6wqqEPGk_uxrrfI3IJhmvJgn3r_WWu4ki-2VjWiTBWOYEBgTPAaNB2ehDoMWS1wfF9roIMw-Td6Ryj9Ap4snN8i4gdC1aWEtW3-u/s640/LowPolyBeautyRender.jpg" width="640" /></a></div>
<br />
<br />
<br />
And unfortunately I didn't make this little cutie, this was made by my buddy and team<br />
<b>F</b>luffy<br />
<b>A</b>nimal<br />
<b>P</b>rojects Artist - Brent Rombouts and I just couldn't help but share her with you guys. This is <b>ChiChi</b>, our intelligent guinea pig with.......a <b>JETPACK!!!1!11one!</b><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZZuvCnv8eNqSnC7NytceMydX7UQf_IyZshgRs_gqvs01AQzMsfwn3H2jvmnBT18JmoR7qvFW7yBvR5FYFxDn5GTyc46EP2gffsFIhtw3jxH8Afs49ZArcu-OgLGiyzFlYeum_uch5CpMq/s1600/chichi.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZZuvCnv8eNqSnC7NytceMydX7UQf_IyZshgRs_gqvs01AQzMsfwn3H2jvmnBT18JmoR7qvFW7yBvR5FYFxDn5GTyc46EP2gffsFIhtw3jxH8Afs49ZArcu-OgLGiyzFlYeum_uch5CpMq/s320/chichi.jpg" width="196" /></a></div>
We had to make a level for a game and we chose this as our heroine. We got the level done and you can actually download and play it if you'd like. I have the installer on my dropbox, so feel free to just download, do the small install and give it a shot. Just make sure you check out the help section for controls and such.<br />
<br />
<a href="https://dl.dropbox.com/u/31340003/UDKInstall-AMothersFury.7z">https://dl.dropbox.com/u/31340003/UDKInstall-AMothersFury.7z</a><br />
<br />
And onto the Next Part!<br />
<br />
T.Out();<br />
<br />
<br />TEvashkevichhttp://www.blogger.com/profile/15221987670020160100noreply@blogger.com0tag:blogger.com,1999:blog-8149923399967442517.post-17254812092695766292012-11-10T02:52:00.000-08:002012-11-10T02:53:05.134-08:00Time for an UpdateT.StartPost();<br />
<br />
Well it's been a while since I did a post (sorry, been busy with school and some side projects) so here's an update for things that I've been doing recently.<br />
<br />
In school I've been learning more about normal mapping and making good normal maps. The first project we had to work on was just texturing a pre-made hatch after we baked the normal map and diffuse map from it (Diffuse maps make it easier to select pieces from a model as they are baked out with the colors, so you can just select the color pieces you want to work on in Photoshop).<br />
<br />
I ended up with this. So it's a concrete door (obviously would have hydraulic assist from the inside for lifting the door) and it's been open to the weather for a while<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwoZWyUTj-9D82RCRaMi1cNu4ieYCRT8wiOpgORr-Wxv3MEcohKY4gGFBNp3savt5I-YXw3Qi2n-CSkKR0UOoXz81jw9ULFtJFr-U_Yaov3oinhef1IXnwzmZRHjx-c5U2HUxsln4eNNFZ/s1600/2DAE_Travis_Evashkevich_Hatch_Render_FINAL.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwoZWyUTj-9D82RCRaMi1cNu4ieYCRT8wiOpgORr-Wxv3MEcohKY4gGFBNp3savt5I-YXw3Qi2n-CSkKR0UOoXz81jw9ULFtJFr-U_Yaov3oinhef1IXnwzmZRHjx-c5U2HUxsln4eNNFZ/s640/2DAE_Travis_Evashkevich_Hatch_Render_FINAL.jpg" width="640" /></a></div>
<br />
<br />
Next off we had to make some sci fi style props, A floor, wall and roof tile. Out of the three I did I like how my floors turn out the best so here's a viewport grab of it with the Xoliul Viewport Shader.<br />
Basically the topic was sci fi for the new DAE building called The Level and I figured what better way to have a call out to gaming for floors than to have D-Pad style floors.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJLTTPUUL2Dfm1QgPP5Dftop-bEI17pyaKVWYzUSrssTLc8flNrdCpjAgdkdXnwts8V0qtKDY-DAVsS8-lZbpi9DxZYWvPDja24CmVpPwuQR-a5RmXH7rL1Jf-h7Bcy2BLVQZ8x2sz8hsa/s1600/VPGrabFloors.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="316" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJLTTPUUL2Dfm1QgPP5Dftop-bEI17pyaKVWYzUSrssTLc8flNrdCpjAgdkdXnwts8V0qtKDY-DAVsS8-lZbpi9DxZYWvPDja24CmVpPwuQR-a5RmXH7rL1Jf-h7Bcy2BLVQZ8x2sz8hsa/s640/VPGrabFloors.JPG" style="cursor: move;" width="640" /></a><br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Next thing we had to do was make 2 more props, same style but a simple and a complex one. My simple prop was stairs, not staircase in it's whole, but just the steps. This is what I came up with, this is a grab from UDK.<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3xHcHr5mQKYHBU0BIb8aQ5xPBDRYW5Q7e5aJzemqkiBsUiAKSmztRIa_AFcpd77mBhWBXLv_gJ-wqGvP5A6jmv-mxux4lgyYY_V3jPM0qa0HuegUC9AhNNW5ZpGnovF9HjnX5MVt_Sv8n/s1600/VPGrabStairs.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="612" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3xHcHr5mQKYHBU0BIb8aQ5xPBDRYW5Q7e5aJzemqkiBsUiAKSmztRIa_AFcpd77mBhWBXLv_gJ-wqGvP5A6jmv-mxux4lgyYY_V3jPM0qa0HuegUC9AhNNW5ZpGnovF9HjnX5MVt_Sv8n/s640/VPGrabStairs.JPG" width="640" /></a><br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: left;">
So this next one is the "complex" prop which was a sci fi Computer. I decided to make a projection style computer that would project from the red ball in the middle onto the screen between the 4 corners. The corners can be tilted like any regular screen as well. </div>
<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/AVvXsEi9mcPHQSIlC2iux8JkKvJp982pokxzmHa7YmMS2lPyHF5lLvX-49AcHmLubu4ReepmVclOPihT2W4okPHHLAWadA3JU_biM1TyRSm4iEHimJYu6nn6lNfRzNTU9-YZx35uraN02GzA_Szt/s1600/VPgrabComputer.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="595" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9mcPHQSIlC2iux8JkKvJp982pokxzmHa7YmMS2lPyHF5lLvX-49AcHmLubu4ReepmVclOPihT2W4okPHHLAWadA3JU_biM1TyRSm4iEHimJYu6nn6lNfRzNTU9-YZx35uraN02GzA_Szt/s640/VPgrabComputer.JPG" width="640" /></a></div>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgP6YyN2JSYHJow2x79PhN8Up7F9AbJimV675q_2UUu7EbmxVM9Et4Zzmr0CkC9avKana76JRbg4xFOHrcbVjlvwfr-1SVeVcwRYZSki8osvgJpBKu7Pq1R2QFbo5TyDqqtyZKttl-XAtbD/s1600/Chainsaw+Katana+Hilt+001.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"><br /></a>
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
And finally, this is just me doing some concepting for the Chainsaw Katana project that I somewhat started a while back (but decided the original drawing I was going to go off of wasn't that great...so I'm making my own concept for it now).<br />
<br />
This is just the hilt, but the throttle for controlling the chainsaw speed. I've thought about doing it more of like a gun trigger as well (which most chainsaw's are in) but thought this would look a bit more clean and neat when actually modeled. So it's more up the alley for a motorbike throttle, this would be the one turn able part on the hilt while the rest is quite static. Either way, it's a WIP.<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgP6YyN2JSYHJow2x79PhN8Up7F9AbJimV675q_2UUu7EbmxVM9Et4Zzmr0CkC9avKana76JRbg4xFOHrcbVjlvwfr-1SVeVcwRYZSki8osvgJpBKu7Pq1R2QFbo5TyDqqtyZKttl-XAtbD/s1600/Chainsaw+Katana+Hilt+001.jpg" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"><img border="0" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgP6YyN2JSYHJow2x79PhN8Up7F9AbJimV675q_2UUu7EbmxVM9Et4Zzmr0CkC9avKana76JRbg4xFOHrcbVjlvwfr-1SVeVcwRYZSki8osvgJpBKu7Pq1R2QFbo5TyDqqtyZKttl-XAtbD/s640/Chainsaw+Katana+Hilt+001.jpg" width="466" /></a><br />
<br />
Thanks for reading, hopefully I will update a bit more instead of so sporadically...<br />
<br />
T.Out();TEvashkevichhttp://www.blogger.com/profile/15221987670020160100noreply@blogger.com0tag:blogger.com,1999:blog-8149923399967442517.post-61147668207516886022012-10-08T03:01:00.002-07:002012-10-08T03:01:49.797-07:00Unity...T.StartPost();<br />
<br />
Soo...the last two weeks of class have made me start using Unity. Now...I'm going to try and not rage to hard at it cause although it has proven me wrong in it not being a bad engine (completely) it has also made it very hard to not hate it while just making a small Asteroids Game for my Integration Projects class.<br />
<br />
So last week we had to make a "mod" for the ole Asteroids game. I threw a few things into mine (as the base game we made in the first week was just a ship that could shoot at different sized asteroids) such as<br />
-The big asteroids would spawn smaller (anywhere from 1-4 pieces) ones when you killed it, the big ones also took 5 hits to kill and all asteroids did a "camera-shake" when they died just for a little effect.<br />
<br />
-The controls could be done by mouse and keyboard or by 360 controller (which after some help from others and tutorials I got it figured out and must say it was decently easy to set up in Unity)<br />
<br />
-A shield power up that you could pick up from the small asteroids sometimes (would possibly spawn them and not all the time) which would have 2 uses per pickup that you could run into asteroids and not die<br />
<br />
-After you got a certain amount of points you would get a 1-up.<br />
<br />
So although it's not a ton of stuff it was enough to make me rage a lot at Unity and C# scripting as I'm new to both haha and it really seems like putting those two things together makes it very hard to encapsulate properly (compared to C++ at least..)<br />
<br />
Next up is making a prototype in Unity for a game, we'll see how much rage I get out doing that project.<br />
<br />
Unity isn't really a bad thing but it is a lot to get used to and kind of just be dropped in and told to make stuff haha.<br />
<br />
T.Out();TEvashkevichhttp://www.blogger.com/profile/15221987670020160100noreply@blogger.com0tag:blogger.com,1999:blog-8149923399967442517.post-59566295624820823082012-09-30T01:54:00.000-07:002012-09-30T01:54:49.629-07:00Busy-BeeT.StartPost();<br />
<br />
So I have been pretty busy the last few weeks getting things ready for a few different projects as well as just getting settled back into being back in school and really just being back home in Europe. It's always a little weird going over for the summer and then coming back for the rest of the year as I always seem to just get settled back into being over there and then just as soon, I have to come back to Europe, but I digress.<br />
<br />
So there's a few things even just school wise that are going to be new for me this year, picking up third year courses and finishing second year ones, learning a lot of new things (the first week already had a ton of C# which I've never programmed too much in) as well as learning to make stuff in Unity and soon as well, UDK.<br />
<br />
Reviews for games are on the way, I'm waiting to post them as there's another side project that is getting started and I don't want to have to use too much old content.<br />
<br />
Looking forward to the very hectic year that it looks like it will be as between the side project I just mentioned (which could possibly take a decent chunk of time), school, writing reviews/playing games to write reviews and also possibly planning Study Nights for the whole (at the very least it will be for the International classes) of DAE it promises to not allow me too much time to myself this year haha. <br />
<br />
Some of the games that are going to be reviewed very soon are as follows<br />
<br />
Batman: Arkham City<br />
Torchlight 1 and 2<br />
Borderlands 2<br />
Dungeon Defenders<br />
Kingdoms of Amalur : The Reckoning<br />
Prototype2<br />
Counter Strike : Global Offensive<br />
Orcs Must Die 1 and 2<br />
Gotham City Imposters<br />
<br />
A few of these are already done and just sitting in my folder haha, just waiting to use them now.<br />
<br />
Well I'll be posting more regularly now (hoping to do at least once a week) and we'll see how it goes for keeping up to date on everything.<br />
<br />
Till Next Time,<br />
<br />
T.Out();<br />
<br />
<br />TEvashkevichhttp://www.blogger.com/profile/15221987670020160100noreply@blogger.com0Kortrijk, Belgium50.83053 3.2644650.750296500000005 3.1065315 50.9107635 3.4223885000000003tag:blogger.com,1999:blog-8149923399967442517.post-48437499692871749002012-08-15T18:18:00.001-07:002012-08-15T18:18:44.684-07:00Well that was interesting..T.StartPost();<br />
<br />
Soo...It's been a while since I had time to post. I'm posting this to do a brief catch up of what has happened recently.<br />
<br />
Since the first few weeks of July I've been working non stop (I've had 4 days off since the 12th) so I haven't had a lot of time to do anything that I expected to do this summer (such as learn my Uscript like I wanted to, or do any real programming) so I'm now going to try and do it in the very very very little spare time I have after work which is about an hour. I'm also going to be filling this time with trying to power out some game reviews since I've been lazy as hell about it for far to long...<br />
<br />
Oh yea...and there was this one time like last week (or the week before...days don't really have a meaning when you work 24 in a row...) that I may have back handed a cup of tea all over my laptop which was another reason I haven't done anything for a week or two so now that I have it back I can try to start stuff..<br />
<br />
So those are my two priorities right now, Doing reviews and some uscript learning ..and I guess I should finish a few of the models I actually started... Anyways... Time for bed. I'll start it tomorrow after work :D<br />
<br />
T.Out();TEvashkevichhttp://www.blogger.com/profile/15221987670020160100noreply@blogger.com0tag:blogger.com,1999:blog-8149923399967442517.post-20980499041585633282012-06-12T06:46:00.000-07:002012-06-12T06:46:08.595-07:00Taking my stuff and going....into UDK!T.StartPost();<br />
<br />
Hey, so I know I was gonna put up a video of the game I made but I don't know if I'm really proud of what it is right now to put it up (I was proud before I added some of the things to it that were required for my exam, but those things destroyed a lot of my work...). I am proud of my game but it's not what it was, I previously had normal mapping in it but for some reason, adding ShadowMapping has really messed it all up. It not only killed my Normal Mapping, like utterly and completely, but it also lit up everything on my models a ton AND didn't actually add shadows (that I ever saw, but I think I do know why).<br />
<br />
So I think I'm going to actually re do my models (make the rock/bricks and textures my self) and then start exporting them to UDK. I'm currently learning the syntax's for UScript (since UDK itself can't directly read c++ file without messing around) and since I just found out that Scaleform is in UDK as well, I'm learning Flash/actionscript to make my HUDs for this game now. So I'll start using trying to post some updates as they come (see how much work I can get done in the summer with working and such)<br />
<br />
I'm gonna try to start porting my C++ code into UScript (once I figure out how to write UScript in UDK itself ...or wherever I have to put it...) and then hopefully I can get back up to speed pretty fast. Keep your eyes peeled for it cause I really hope to keep the motivation up to make this game.<br />
<br />
T.Out();TEvashkevichhttp://www.blogger.com/profile/15221987670020160100noreply@blogger.com0tag:blogger.com,1999:blog-8149923399967442517.post-90996912035021153082012-06-09T07:00:00.002-07:002012-06-09T07:00:40.763-07:00Explosion Shader V2.T.StartPost();<br />
<br />
<br />
So, from my last post with my "explosion" shader, I have made it a bit more controllable and "realistic". <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/4UbJ6YPDP4Q?feature=player_embedded' frameborder='0'></iframe></div>
Here's a video of 3 explosions with varying "weights" of the object.<br />
The shader isn't really that complex in it's nature and has some easily tweaked values to make it so you can determine a few things about the explosion.<br />
<br />
As far as how it's written, I'm going to assume that if you were searching for this kind of shader that you have either been taught or know the basic pipline for Shaders (Vertex -> Optional Geometry -> Pixel) and would also like to say that I'm by no means an expert in shader writing either so if you happen to see something I could improve, feel free to leave a comment, it's always appreciated. On to the code Snippets!<br />
<br />
K, so this shader uses a few things that really help to determine the explosion.<br />
//-------------<br />
//Floats<br />
//-------------<br />
1 - float SpeedVariation; This will help to create differences in how much speed the exploded material will gain at explode time with 1 being a very small explosion and 5 being the kind that I used in the video. <br />
<br />
2 - float MaterialWeight; This is what determines how fast your exploded pieces will fall after they have been propelled out. <br />
<br />
3 - float ExplosionViolence; This is an extra parameter to help make the explosion either big or small. Smaller the EV, the smaller the explosion. (It also gives some weird explosions if you use numbers closer to 0 like 1 or 2. Greater than 3 is usually a safe bet for a decent looking explosion.<br />
<br />
I have 3 random float2 's that I use to get some more randomness in the texture coord look up and my speed calculation as well. rand1 = 0.09, 0.05 rand2 = 0.075, 0.05 rand3 = 0.09, 0.04<br />
<br />
Those variables coupled with a Time variable help to make it propel and fall with some realism.<br />
//-------------------<br />
//Sampler States<br />
//-------------------<br />
I use 2 sampler states for this as well, one that is used for the diffuse and the other for sampling the gradient/noise.<br />
<br />
SamplerState samGradient<br />
{<br />
Filter = MIN_MAG_MIP_LINEAR;<br />
Address U and V are both Clamp<br />
}<br />
and the diffuse one is just AddressU and V with Wrap;<br />
<br />
//----------------<br />
//Textures<br />
//-----------------<br />
There are also 3 texture2D's that I use for this which are as follows.<br />
<br />
1 - Diffuse - just whatever you want your object to have for it's regular texture<br />
<br />
2- Noise - This you put in a noise texture to get some randomness for the distance the exploded pieces will travel<br />
<br />
3 - Gradient - I use a gradient of 1 X 256 that is white to black.<br />
<br />We sample the Noise and Gradient in the Geometry shader to help give just a touch more randomness.<br />
<br />
I use triangle as my Geometry input as we only need the 3 verts per tri and the [maxvertexcount] is 3 as well since we only do the calculations for movement per tri.<br />
<br />
<br />//-----------------<br />
//Geometry Shader<br />
//-----------------<br />
<br />
So the way I did this shader was to make it so the pieces fly in a somewhat up and out movement (Outwards explosion from the center) the way I do this is by grabbing all the normals of the tri and adding them then taking the average (divide by 3) and saving this in a float3.<br />
<br />
I then take the average of the texture coordinates and use them to do a SampleLevel on the noise and gradient textures.<br />
<br />
example<br />
float Noise = 2.0f * m_TextureNoise.SampleLevel(samGradient, (aveTextureCoord + m_random),0).r - 1.0f;<br />
<br />
<br />and same but a different randomvalue for the gradient one. <br />
<br />
One of my math teachers loved the word Lerp and Slerp, now I never really bothered to use them that often but I figured this would be a good time to use a lerp go get a bit of randomness.<br />
<br />
for my "speed" calculation I do a float3 (0, lerp( Noise, Gradient, m_SpeedVariation), 0);<br />
<br />
Gravity is the negative of the "MaterialWeight" * time (only in the Y direction obviously).<br />
<br />
Now the first bit that I was trying to get the variations to work I didn't have this calculation, this came from a friend of mine Jay Heggerud that said if I wanted to get some more variation on the speeds/distances the pieces travel to maybe try making my initial speed based on the min speed I wanted + the speed variation * random value for differences. <br />
<br />
So this puts my vi calculation at something like this (to get a random minimum speed on the initial we use the Noise and put it like this.<br />
<br />
float3 vInitial = float3(Noise * m_SpeedVar , Noise * m_SpeedVar , Noise * m_SpeedVar);<br />
<br />
Now we're pretty much at the end of the shader. The only part left is to plug things into some equations from Frank Luna's Intro to DirectX book (where I also got the idea to make an explosion shader)<br />
<br />
So it's a somewhat basic Physics equation we put into make the triangles travel and fall kinda realistically.<br />
<br />
0.5 t^2 a + t vi + p0; so this more or less translates into 0.5f * accel * time squared + vinital * time + the inital position;<br />
<br />
for the initial Position we use another formula to represent the explosion, also from Frank Luna<br />
<br />p(i) = p(i) + tn where i = each vertex 1,2,3<br />
<br />
so if we shove that in there as well we get <br />
<br />
0.5 t^2 a + t vi +(p + tn);<br />
<br />
Now I deviate from the equation in the name of randomness and threw some other calculations into it as well. <br />
<br />
The full calculation for the position of one vertex is<br />
<br />
<br />
pos[0] = 0.5f * gravity * (m_Time * m_Time) + (vInitial * m_Time) + ((vertices[0].Position -vertices[2].Normal * m_Time)+(normals * (m_Time*(m_ExplosionViolence * sin(cos((m_SpeedVariation * speed )))))));<br />
<br />
<br />Output each vertex with it's respective normals and texture coords and bam, you're done really.<br />
<br />
Hope this has possibly helped or at least been somewhat of an interesting read, I'm gonna go write my paper for this now haha.<br />
<br />
T.Out();TEvashkevichhttp://www.blogger.com/profile/15221987670020160100noreply@blogger.com0tag:blogger.com,1999:blog-8149923399967442517.post-5590718854667609882012-06-07T11:42:00.001-07:002012-06-09T07:01:25.055-07:00Explosion Geometry ShaderT.StartPost();<br />
<br />
So for my exams I also have to make and write a paper on a Geometry Shader written in ShaderModel4.0 for HLSL. My original idea was to do a grass shader because...they seem kinda fun. Well it didn't work out so well and I had technical problems that I still don't know what was causing them.<br />
<br />
So, instead of grass rendering I decided to make things explode! So I wrote this shader (with some help from my teacher to try and get some more velocity on the pieces when the explosion starts) in the last little bit and I think after playing with the equations a bit I finally have a decent start on this. I am still going to try and make the pieces have some more variance in speed but it's a work in progress.<br />
<br />
<a href="https://vimeo.com/43616612">https://vimeo.com/43616612</a><br />
<br />
Above, is the link to the video I took inside FXComposer2 where I wrote the shader. As I said, it's the first (good) iteration and I'm gonna try to tweak to be even a bit better than current but, that being said, there it is.<br />
<br />
I'll also be posting the paper on it later (going to write it tonight/now-ish) and some snippets from the shader itself as there really isn't that much to go on when searching for Geometry shader help/tutorials (that I found atleast for DirectX)<br />
<br />
T.Out();TEvashkevichhttp://www.blogger.com/profile/15221987670020160100noreply@blogger.com0tag:blogger.com,1999:blog-8149923399967442517.post-53067183828333773752012-06-05T13:12:00.001-07:002012-06-05T13:14:38.780-07:00T.StartPost();<br />
<br />
So, as I think I've mentioned in the previous posts, I'm making a game for my exams that is "tentatively" called Dungeon Explorer. Yes, it's one of those dungeon games (if I had the time before the Exam I'd love to get enemies in and different weapons too but it's not gonna happen..) where you try to find loot and avoid dying. This one I decided to make "Procedurally Computer Generated".<br />
<br />
For those that don't know what PCG is, in short it's basically the game makes itself. The only thing the player/user would have to do is tell it how big of a map you want to play in and how many rooms you want and the game will make a level based on those. Now that doesn't sound sooo fancy but the thing is, everytime you play, it will be different.<br />
<br />
Right now I have the level generation working quite well, with A* (A-Star) pathing between the rooms as well as "treasure" tiles" and I just added Stairs Up/Down (and am working on the trigger so it will make a new level if you go Up or reload the last one if you go Down...) I still need to add locked doors/keys but that's hopefully something I'll have time for.<br />
<br />
In the next few days I'll get a short video about it with me just running around in the level and showing new levels as well as Saving/Loading (which was kind of a pain in the butt to make.) Now that said, the movie will also be with the current textures which...aren't amazing but I wouldn't say are terrible...just don't laugh to hard at them haha ;).<br />
<br />
Anyways, back to programming and Const Correctness Checking for the first presentation it's due for tomorrow.<br />
<br />
T.Out();TEvashkevichhttp://www.blogger.com/profile/15221987670020160100noreply@blogger.com2