Sunday, December 6, 2015

HT: Adding lean left/right to the mecanim animation



It took a while to figure this out. To do this, I needed to create new animations, a steer left, and steer right animation, and play them when the player is turning left or right.

Technically, they weren't animations. They were just single frame poses.
Preparing the Mecanim state machine for this is easy: the move animation state just needs to be converted to a blend tree, then I'd add the steer left and right animations to it:


I made a new parameter called "Steer". It's a float. The "moving straight forward" animation is set to use 0, the "lean left" is in -1, and the "lean right" is in +1.

The preview shows how it will end up looking like:


Now, how to properly play those in runtime? What I want to do is detect when the player is rotating the thumbsticks, and use that to play the lean left and lean right animations correspondingly.


This same thumbstick is the one used for movement. So it's when I'm rotating the thumbstick I should transition from lean left to right and vice-versa.

Turns out it's not so easy.

I'm using CharacterController which doesn't calcualte angular velocity. I could've just used that to detect when the character is rotating (equivalent to when the player is rotating the thumbstick).

My first thought was to use dot product on the character's current forward direction, and the direction where he needs to go to. You see, I make the character smoothly rotate towards where the thumbsticks are pointing. When you want to do a smooth rotation, you'd need to store where they currently are facing, and where they need to face to, and slowly interpolate to where they need to face to. So I thought of using those existing variables already.

The red dot here is where the thumbstick is pointing to, and the yellow dot is where the character is currently facing.

The dot product tells me how far apart the two direction values are. But it doesn't tell me if the direction where the character should go to is to their left or to their right. That's important since I need to know if I should play the lean left or lean right animation.

This is the video that taught me dot products:



So I needed an additional way to determine as to what direction the thumbsticks are rotating to. I thought of deriving the angles (in degrees) that the direction values are creating. Then subtract the two to tell if we're rotating to the right or to the left.

It almost worked well.

I noticed "bumps" when I rotate my character to the left.



I realized it was because angle values I calculate always get clamped to 360 degrees. When the target angle is over the 360 degree mark but the current angle isn't over that yet, the resulting value is too big, causing the "bump".

I recorded the angle values to a graph, so I could see what exact values I'm getting.


I figured the only way I could get around this was to get the proper angle value when it crosses over the 360 degrees mark. With a little bit of trial and error, I found the code that best suited the situation. It looks like this:

if (_angleDelta > 270) _angleDelta = -(360 -  _angleDelta);
if (_angleDelta < -270) _angleDelta = 360 + _angleDelta;


The only thing left was that I still noticed spikes in the graph of my "Steer" getting function. Depending on how bad your framerate is, it made the whole animation look like it was stuttering. I guess there was noise in the input data.

This graph looked a lot worse before.


So I just added a sort of average filter on the last 4 values recorded in the graph and use that instead:



It all seems rather straightforward now that I've put all this in a blog post, but before this, I forgot what "dot product" is and what values it returns, I didn't know what code to use to clamp angle values, and I didn't know what an "average filter" was. There was lots of looking through the Unity manual, and I wasn't even sure if this "Steer" factor idea was the right way to go about it.

It's all exploratory when solving a problem like this and trying out clever solutions.

I was a little against posting a blog post about this because it did take up the entire day, making all those screenshots and videos, and it's making me feel that people would think I'm obsessing over the little insignificant details. At least the time it took to make and fix the whole steer feature took only about a day of work.

Wednesday, February 18, 2015

Visa Application

I gave myself a mental note to not get distracted while a self-satisfied woman looked like she was letting her boobs bounce on purpose as she walked eagerly to the exit.

Guess someone's visa got approved.

I looked up again. The dot-matrix screen reminded us whose stub number was ready for interview. Above the shuffling of feet and the confused whispers, the usherette kept on reminding us that the stub numbers come up in random order.

"Ah, raandoom!" I heard someone say beside me.

What that really meant was, simply that some applicants finish their talk with the consul faster than others.

...

Honestly, in my head I thought the interview consisted of sitting down in some posh office. Some nice plants, a portrait, certificates hanging on the wall, maybe a golf club leaning somewhere.

And then I'd come in, nervously stammering and showing my papers to a stern old man who'd look like he never has enough time.

Of course, as with most of what I imagine, it was nothing like that.

The embassy probably gets a hundred or so applicants per day, judging from the long lines and the amount of seats.

So it all worked like a production line. Apart from the guards and the usherettes, all the personnel you talk to are behind windows, including the consuls. There's a chute at the bottom of the window where you pass down your passport.

The whole thing reminded me of computers and how they pass data around.

...

It was a long wait before my number lit up, so I had a lot of time on my hands.

Rummaged through my old passports. I went to Hong Kong when I was a kid? Oh wait, I did. I remember riding that World's Longest Escalator ride.

I didn't think much of it back then. But it turned out it really was the World's Longest Escalator.

Someone, at some point in time, thought it was a good idea to put SeaWorld Hong Kong on top of a mountain.

I looked at all those ink stamps on the pages. Departure. Arrival. They had different shapes, bright colors. I heard myself make a wistful laugh. They made my old passports look like stamp collections.

I saw my DS-160 form had the words CAPTURED stamped on it.

For a moment, the nervousness was replaced with disgust. Middle-aged guys ogling X-ray body scans of passengers behind the security doors of an airport. Videos of police brutality on Facebook. Why would anyone want to live there?

It makes me think getting into the US isn't as rosy and important as these hopefuls are making it out to be. Wearing smug faces, trying to display they know more than the guy next to them. Maybe it's just to cope with the nervousness? Validating all the hardships they went through?

In a place like this, you could tell who were the people who had actual character.

...

The guy beside me started saying out loud the subtitles on the instructional video playing in front of us.

Jeez... Practicing English just now huh?

More time passed.

I couldn't help yawning over and over. Well, I did take the 7:15 AM. I needed the earliest slot I could find. Russ had been bugging me already, and I've put this off for a long time.

Man... I found myself slouching in my seat as I thought, I just want to get back in front of a computer.

The instructional video even managed to be funny at one point:

Myth: Only cute people get their visa applications approved.

Fact: Non-models get their visas approved every day.

Hah.

The next slide came up:

Myth: Single people get their visa applications denied.

Fact: Your honesty is more important than your marital status.

Ok, not laughing so much now.

...

When my number came up, I kept looking at it to make sure it really was mine. 2126. Probably took too long, cause the guy beside me caught my attention and told me my turn is up.

Looking back, the interview ended faster than I thought.

I just ended up talking about being chief technology officer, us having a booth in Game Developer's Conference, the game we're marketing.

"Games?", he asked.

"Yeah, video games.", I nodded back.

"Oh, cool.", he said.

"Our game looks like this...", I held up a printout of one of the screenshots of our game.

"So are you guys gonna put this out on... games..."

"Sorry?" I asked.

"I mean, are you guys like, will you put this out on the Xbox?"

"Oh," I shook my head, "Getting into consoles is a lot more difficult, so we're targeting... only Windows for now."

"Ah", he made a face as if he'd scratched a card that said 'Try again next time'.

"So how long do you plan to stay?"

"Oh about... 2 weeks maybe. My partner has a relative in Las Vegas so that's probably where we're staying--"

"Ok, visa approved. Thank you."

I saw him place my passport on a pile. Presumably, the pile of passports that would get visas.

"Oh, thank you.", I managed to reply, before leaving. I haven't even showed any of the documents yet, I thought as I left.

I didn't look into his eyes the whole time. I was told that it gave the impression of shifty-eyed liars to Americans.

I wonder if he didn't like that.

...

As I walked out, there was only one thing that crossed my mind.

I took out the cheap black ballpen I stuck in my left pocket a few hours ago, and stared at it.

Fuck, I got duped into buying this stupid ballpen! The old lady in front of the embassy was hawking ballpens, making them sound important. Turns out I didn't even need to write anything the whole time.

Wednesday, September 24, 2014

Ingress Day 4

I decided to explore the southern part of my nearby vicinity. There were two portals there: the Ateneo Blue Eagle Gym, and the now erased graffiti on some doors of an abandoned building by the roadside.


Blue Eagle Gym

This portal looked like no one was reclaiming it. So I went here to try to get it.


The gym is inside the Ateneo University campus. Since I'm not a student there, I could not get in. However, I thought I could reach it by standing outside the school grounds, by the fence. I can almost reach it, but couldn't. So I had to abandon this one.



Marked Doorway Murals

This graffiti portal, which I remember being there before but had been removed some time ago, seemed like no one was touching it, so I investigated it.

Turns out it was nearby a lot of telephone wires, and some power line posts with transformers. Seems like that disrupted my 3G connection to the game, so I couldn't interact with this portal at all. I logged out to try to "refresh" the game, but I couldn't even log-in again while I was in that spot.





So all in all, I couldn't expand my options here.

Meanwhile there's a place nearer my "safehouse" that I thought would work as a new portal and I was thinking of submitting it. I'll try it one time.

Ingress Day 3

Finally reached level 3!



And got something pretty powerful:



An Enlightened captured that portal I was using. I still haven't reclaimed it. I realize I should have used Power Cubes when my XM reserves run out when attacking, so I could keep at it.



Monday, September 22, 2014

Ingress Day 2


I accidentally broke my toenail while running. Had to limp my way back to the apartment.



Not to worry, it's all patched up.





My portals got attacked. Looks like this won't be boring too soon.

That green one used to be mine.

Somewhere out there, some frog's fucking up my portals.



Ingress Day 1

So I just found out I have hypertension. Part of it means I need to do cardio exercise.

I thought, "Well, I could use one of those fitness tracking apps, or I could start playing that Ingress game I saw long ago."

So I started playing Ingress.

Seems like some people nearby already started putting up some portals, but looks like they were abandoned. So I took them.

I'm only starting out


Looks like someone's been busy. Those aren't mine, obviously.






Thursday, May 15, 2014

Productivity tools for those with problematic Internet connection

3.6 Mbps here is the average for premium subscriptions that the well-off can afford.
Please take note that that is the theoretical maximum.
There is pretty much nil in the way of guaranteed minimum speeds.
We have 2 Mbps in the office. I have 0.46 Mbps in my house.

Where I live, I can't rely on the Internet connection speed to be reliable in my everyday work.

So here's some tools I compiled to help mitigate or workaround these issues. I err more on the free programs, and ones that work in Windows and Android. I provide links to alternative software for each.

Hopefully, you'll have use for them as much as I do.


Evernote

A note taking program that can also save web page snippets.



Pros:
  1. Can work offline, will sync to cloud when Internet connection is available
  2. Has a mobile app version
  3. Allows sharing to other people, with settings for permissions
Cons:
  1. The Evernote window can hang occasionally as it does whatever housekeeping it does to its data.
Caveats:
  1. Bandwidth usage limit capped at 60 MB per month for free users (understandable; not really a problem, but you should be aware of it)

More than a simple note-taking program, Evernote can also save web pages. This is important as it gives me offline access to those web pages, instead of simply bookmarking them.

So why not just save the .html page on your hard drive? Evernote allows you to organize your notes/web page snippets neatly: you can organize them into "notebooks", search the text, add tags, see the original URL of the web page you saved, and most of all, they get synced in the cloud. If you get the mobile app for Evernote, all your notes also show up in your mobile device.

Found a gamedev article that you feel you're gonna need for reference later on? Clip it on Evernote. Had a sudden stroke of good ideas while on the go? Type it down on your smartphone with the Evernote app. It'll sync to your PC later on, and you can flesh out the idea more on your keyboard.



Catch: The free version allows you a limited amount of stuff to sync: 60 MB worth of data, but it resets every month.

So if you find yourself saving pages with humongous images, you're better off simply saving them the usual way. Evernote is primarily for notes anyway.





Trello

To-do list creator that's perfect for Kanban style, but also works well otherwise.




Pros:
  1. Syncs to cloud, has mobile app versions
  2. Allows sharing to-do lists/boards to other people, with settings for permissions
  3. Intuitive controls, 
  4. Can have plugins. Burndown For Trello and Scrum for Trello in particular is interesting.
Cons:
  1. For desktop, it's accessed only via your web browser; doesn't have offline access. If you went to the Trello website while having Internet connection, it will still continue to work when you lose connection. But it can't start if you do not have any Internet connection in the first place.
  2. As of yet, only the mobile app version has offline access
I don't personally use a strict Scrum style. For that, you can try Pivotal Tracker.

Running the mobile version of Trello on your desktop PC

While you can't have offline access to Trello on your PC, the mobile version can. And it's possible to run an Android virtual machine on your PC, then run the mobile version of Trello on top of that.


For an Android virtual machine that's easy to install, there's Bluestacks. But you need to pay a subscription to use it. If you don't want to pay, you'll be required to install some sponsored apps/games to continue using it (not a problem, really).

For something that's totally free and open-source, there's Genymotion. I haven't tried that yet however.


Some noteworthy alternatives to Trello:


  1. Written in .NET. Can work offline.
  2. If you set up your own redis database server somewhere, Personal Kanban can sync to it.

  1. Single .html page, written in HTML/Javascript. Can work offline.
  2. Can sync to Google cloud storage.





TiddlyWiki

Your own wiki site, all in one html page.

There's a beta version 5, which is an overhaul of TiddlyWiki, and there's the classic version.



Pros:
  1. Works offline. Upload the .html page on the web, and it also works online.
  2. If you need it to sync, just put the file in your Dropbox, Google Drive, or whichever cloud storage service you prefer.
  3. The new version 5 (currently in beta) can also be deployed as a Node.js application
  4. Numerous plugins, but take care as some of the ones found online only work in old versions.
  5. Themable skin
Cons:
  1. Easy, one-click saving of changes to your TiddlyWiki is problematic, as web browsers don't normally allow this (due to security considerations). Firefox has a plugin to bypass this restriction specifically for Tiddlywiki files. Alternatively, you can just save the .html page the usual way and overwrite the old file.
Caveats:
  1. Has no official mobile version, but there is a 3rd party program: a web browser specifically designed to work properly with TiddlyWiki files: AndTidWiki (Put your TiddlyWiki in your Dropbox, get the Dropbox app for your phone, and use AndTidWiki to edit it. You now have a wiki that syncs to and from mobile!) Here are other mobile apps for using TiddlyWikis.

Being a wiki, TiddlyWiki has some uses that overlap with Evernote.

But for me, I use my TiddlyWiki as a knowledge-base; an encyclopedia for my game's lore.

Evernote on the other hand, is for hoarding tutorials, references, and jotting down ideas quickly.





Google Docs

Create documents, spreadsheets, presentations, etc. on the cloud.



Pros:
  1. Syncs to cloud, has mobile app versions
  2. Can work offline and will simply sync when Internet connection is available
  3. Allows sharing documents to other people, with settings for permissions
  4. Allows real-time collaborative editing on documents
  5. Have plugins that allow it to create more types of documents, including a kanban board, plain text files, guitar tablatures, etc.
  6. Can import OpenOffice documents
Caveats:
  1. Works best in Google Chrome



LAN Messenger

Offline instant messenger (LAN only) and file transfer tool.


This is pretty self-explanatory. It's like Skype/Yahoo Messenger/etc., but you don't need to connect to a server on the Internet. However, you need to be connected to a LAN of course.

Anyone else in the LAN running the same program can see you, and you can send messages, set up chat rooms, and transfer files to each other.

It's best for communication between (trusted) members of a team.

LAN Messenger works on Windows, Mac, and Linux, so it's an easy way to transfer files, if your people use different operating systems.

It also has a portable version, which means it can be installed in your thumb drive.




FreeFileSync

Backup/Sync tool. It makes sure two sets of folders have the same files/subfolders inside.


Using USB thumb drives and external drives is common for us, so a tool that figures out stuff for us like "which of these again is the up-to-date version that I should copy??" is nice.

I have a bunch of concept art reference images for my projects and I like to do backups of them to my external drive. However, I do shuffle them around across many folders over time as the project matures. Having to make sure the folders in my external drive match up with how it is in my laptop by myself is a hassle, so I let a file sync program do this for me.

You can have it ensure the files/subfolders in the destination folder exactly match up the files/subfolders in the source folder, or you can let it work on a per-file basis to resolve situations.

The program basically tells you "they're the same filename, but the contents are different. which one of these do you want to keep?" and you have the option how to resolve it:

  1. Keep both and just have the other file be renamed.
  2. Make the program stop and ask you to inspect both, letting you choose which you want to keep.
  3. Simply always keep the one that had a later "date modified", and discard the old one.




NetSpeedMonitor

Bandwidth monitoring tool.


How much is your PC downloading right now anyway? With a bandwidth monitor tool, it's easy to see if your Internet connection is going through that temperamental phase again.

There are a lot of programs that can do this, but what I prefer is something that I can see even if I have a maximized window, unobtrusive, and doesn't take much space. NetSpeedMonitor does the job well. It adds a bandwidth reading right beside your system tray.





NetBalancer

Bandwidth balancer.


Taking this a step further: have you ever noticed your download speed spikes up when you browse the web? I found this usually infuriates other people in the office playing an online game or watching a streaming video.

What if you could limit your web browser to download at a set 10 kb/s? Even if it doesn't have that feature? With a bandwidth balancer you can. Any program transferring data to the Internet can be throttled.

NetBalancer is the one I've tried, and it works ok. The free version allows you to throttle only up to 3 programs at a time (you can switch which 3 programs are throttled at any time), and that's usually enough for a single person throttling his own PC. (NetBalancer has a version that can throttle for your whole network.)

The best would probably be a sophisticated software that's installed on your router (the device that connects all your PCs together, and likely also your connection to the Internet). ISP's here give you some pretty bare-bones routers that aren't of much flexibility that allows that. So a user-driven program can work pretty well in this situation.

Even without using it as a bandwidth balancer, NetBalancer is useful to check which of your programs is hogging the download bandwidth.

Catch: I've had a side-effect that my laptop's CPU usage was always about 25% even when I wasn't doing anything. It made browsing my files slow and whatnot. Seems like it was connected to the WMI Provider Host hogging the CPU problem. I'm not sure if it's related (it's also likely that it's not) but when I uninstalled NetBalancer plus tweaked a bunch of settings in my Windows, the problem went away. I use Windows 8.0 by the way, and it's also possible the issue was fixed in Windows 8.1.




Text-only mode for your browser

Text Mode for Google Chrome

Opera web browser (has this feature built-in via user mode)

Text Only, Lynx Web Browser, and Opera Mini for Android



Maybe you need to check some documentation online, maybe an interesting gamedev article came up in your Twitter feed. At that point, you're only going to care about seeing the text first. With a flaky Internet connection, it'll take longer if the images are going to be downloaded too. If there's diagrams you need to see, it can be nice to easily load them on your demand with a simple click.

I use Google Chrome and there's quite a lot of these plugins around. The one that worked ok was Text Mode, but it's a toggle that will block/unblock image downloading for all tabs in all your web browser windows. A per-tab setting at the least would have been useful.



Squid proxy server

If you're in a small office where people end up downloading the same thing over and over across different machines, you'll find yourselves eating up download bandwidth really quick.

"Hey Tim, check out this youtube vid...". who then passes it to Sally "cool, check this out", who then streams it from her laptop... and pretty soon you'd have hit your "unlimited" data cap.

A proxy server is meant to get rid of those redundant downloads.

How this works is, instead of all the PCs in the office directly downloading stuff, they now only request it from another PC, designated as the "proxy server".

The proxy server downloads whatever's requested, and saves them in the hard drive. The next time someone asks for the same thing (a video, a web page, etc.), it's not going to bother downloading it again, it will just send the already saved file to your PC.

In the case of user-sensitive data like when you access your private Facebook stuff, it's not going to cache that because it doesn't make sense to do so.

Catch: It requires you to have an additional PC running as the proxy server (likely turned on 24/7, or as long as there are people in the office).

I've had success with Squid, and it's perhaps best to run it on Linux in text-mode, to save on your electricity bill. An old Pentium computer can probably suffice for this in a small office set up. Being Linux, that's gonna require someone who knows their way around it to get it working properly. If you don't have that luxury, there's also a Windows version for Squid.

Squid is free and open-source, however, it requires some extra configuration to get it to work properly with caching Youtube videos or any streaming video.




Peer-to-peer file sharing over the Internet

infinit

BitTorrent Sync

Sync your files across many PCs or mobile devices just like the way you torrent.

Catch: This is relatively new. Even with those assurances of being secure, I would err on the side of paranoia and expect some security vulnerabilities eventually.

I'd use this only for large files that I'm willing to share to the public anyway, like demo builds of my game.



That's all. I'll add more when I think of something worth mentioning.

Feel free to suggest other apps and tools in the comments section.