September 08, 2015

Moved to NY

Here's a personal post since I haven't done one in a while. I moved back home.

Brooklyn Bridge

On a side note, I've been so lazy with all of my personal side projects.

May 06, 2015

New Unity Game Project

I wanted to update a bit on the game development front as I haven't posted anything regarding that in a while. I recently just finished my second foray into learning Unity having finished their 2D Roguelike tutorial. Definitely a lot easier for me to understand having tinkered with Unity3D and having developed 4orner.

So I am trying to create another game using Unity as my technology of choice. Nothing as strict as my thirty day challenge as last time, but I plan on utilizing some of the mistakes and lessons learned from my previous experiences.

Here are the two simple goals to my endeavor:
  • Create a mobile game with Unity
  • Publish to Google Play and iOS App Store
As far as what kind of game I want to create, the pictures below are the initial whiteboard mock-ups I quickly put together.
What the game will look like (hopefully)
How the game will play (possibly)

On a site note, I wonder what I should name it?

Show Review - Battle of Changsha (战长沙)

Title of Show: Battle of Changsha (战长沙)
# of Episodes: 32
Length: ~40 min per episode
Recommended: No
Tear Rating: 3
Favorite Songs: 我会记得你
Spoiler alert. Do not continue reading if you don't want the show to be spoiled.

For some reason, I find it really difficult to relate to Chinese dramas. I find some of the characters in this show to be incredibly frustrating and it made the show really difficult to sit through. Had my goal not been to learn the language but rather watch and enjoyable show, I probably would've stopped watching a long time ago. Unfortunately, despite sunk costs, I still struggled through all the way to the end.

I hated almost every character in the beginning that wasn't the son-in-law (姐夫). He was the only one who actually did practical things for the sake of the family and despite his "shady" dealings in the black market or ethically questionable businesses, he was the one character who I felt was actively doing something good. Every other character was just running around causing trouble and just complaining.

For example, in the beginning, the father would constantly berate the son-in-law about his shady businesses, stating that his money is dirty and unethically earned. Yet the father still enjoys the classical songs and theater recordings that the "dirty" money bought. This made me hate the character with enormous passion. I was pretty happy when he died in the end. Most useless character ever.

All-in-all, definitely not a drama I would recommend to others. Sure the production quality was better than 痞子英雄, but there were definitely scenes where the CGI was painfully obvious. Not to mention the same exact annoyance from 痞子英雄:
  1. Dramatic event happens to a few characters
  2. Those characters run around like headless chickens from the shock of the event
  3. Every single other character in the show asks them "what happened"
  4. They don't say it outright or make it a bigger deal than necessary
  5. More unnecessary drama unfolds from not communicating like regular human beings
I do not recommend this show.

On a side note, refer to this blog post if you are curious as to why I am reviewing this show.

April 14, 2015

Show Review - Steins;Gate (シュタインズ・ゲート)

Title of Show: Steins;Gate (シュタインズ・ゲート)
# of Episodes: 24 + OVA + Movie (シュタインズ・ゲート 負荷領域のデジャヴ) +
Length: ~20 min per episode, 1 hour 30 min for movie
Recommended: Yes
Tear Rating: 4
Favorite Songs: Hacking to the Gate, いつもこの場所で, and あなたの選んだこの時を
Spoiler alert. Do not continue reading if you don't want the show to be spoiled.

Back to Japanese already! It feels like just yesterday when I started on this adventure to watch a bunch of shows and I've cycled through Japanese, Chinese, and Korean already. This show is quite different from the last Anime I saw (Code Geass) but it does not disappoint in any fashion at all. I loved each and every one of the characters and their personalities were quite humorous. The comedy and humor was very well-done without being too over the top.

A lot of the time travel science stuff was kind of hard to follow, but this image timeline helped me understand it a lot better. It's really awesome how the creators are still creating content for this show that not only stays relevant but also does not disappoint at all. I loved the original 24 episodes, loved the extra OVA episode, thoroughly enjoyed the movie, and even watched the short animated clips online. Overall a fantastic Anime.

On a side note, refer to this blog post if you are curious as to why I am reviewing this show.

Show Review - Reply 1997 (응답하라 1997)

Title of Show: Reply 1997 (응답하라 1997)
# of Episodes: 16
Length: 45~60 min per episode
Recommended: Yes
Tear Rating: 2
Favorite Songs: Memories, 눈물, All For You, and 우리 사랑 이대로
Spoiler alert. Do not continue reading if you don't want the show to be spoiled.

Very satisfying show. Plenty of interesting characters and funny moments that kept you guessing all the way to the end. The end was very happy and left me feeling all giddy inside, which I appreciate from some of the darker shows nowadays. Because I watched this without subtitles, I feel like I missed a few things throughout the show, but it wasn't too hard to keep up even with the 부산 사투리 accents. I even picked up some new Korean slang words, haha.

On a side note, refer to this blog post if you are curious as to why I am reviewing this show.

April 07, 2015

Show Review - Black & White (痞子英雄)

Title of Show: Black & White (痞子英雄)
# of Episodes: 24
Length: 45~60 min per episode
Recommended: No
Tear Rating: 0.5
Favorite Songs: 放逐愛情 and 關於我們
Spoiler alert. Do not continue reading if you don't want the show to be spoiled.

Very underwhelming drama despite the reviews and recommendations from friends and the internet. Unfortunately, the production quality severely detracted from my experience. For example, for an action cop show, a lot of the shooting and explosions were super cheesy and very fake. I found myself fast forwarding through all the action scenes.

The show also takes forever to ramp up. It took around 15 episodes for me to somewhat enjoy the plot and appreciate the story. There were so many instances where characters in the show knew what was going on but would never reveal it to the protagonists for seemingly no reason at all. If I had a dollar for every time someone in the show asked "怎么回事" or some variant of that (到底是怎么回事) and the response was just silence, I would be rich. I don't understand. Is it customary to not answer when asked what is going on in Taiwan? Very frustrating experience.

On a side note, refer to this blog post if you are curious as to why I am reviewing this show.

Show Review - Code Geass (コードギアス)

Title of Show: Code Geass: Lelouch of the Rebellion (コードギアス 反逆のルルーシュ)
# of Episodes: 25 per season, two seasons
Length: ~20 min per episode
Recommended: Yes
Tear Rating: 1
Favorite Songs: Continued Story and 僕は、鳥になる
Spoiler alert. Do not continue reading if you don't want the show to be spoiled.

Hands down the best anime I've seen so far. But that's not to say that I'm an anime expert of connoisseur by any means. I've also enjoyed Attack on Titan and Death Note. If you're a fan of dark thought-provoking themes, then this is definitely a must-see. I enjoyed every single episode (even the light-hearted "filler" episodes) There were many twists and turns that left me speechless and with each end of an episode, I found myself immediately starting the next one.

One of the best endings of a show I've ever seen. A lot of people debate on whether or not Lelouch is dead at the end and I personally really want him to be alive, but of course it's up to interpretation.

On a side note, refer to this blog post if you are curious as to why I am reviewing this show.

Binge Watching

Haven't blogged in a while, so I figured it's a good time to post something about my own personal life. Lately, I've been watching a lot of shows. I am trying to alternate between Japanese, Chinese, and Korean shows so that my language skills stop deteriorating from lack of use. While I'm only two shows in, it's been a fun experience so far.

So I've decided to start a section in my blog where I review the shows I watch. You can find a complete list of these review posts under my Reviews & Guides label. In addition, I also made a YouTube playlist of my favorite songs from the shows that I watch.

The posts will be in the following format:
  1. Title
  2. # of episodes
  3. Length per episode
  4. Recommended? - Yes / No
  5. Tear rating - Amount of times cried
  6. Favorite songs

On a side note, look out for more game development related things sometime next week! (Hopefully)

March 03, 2015

dotaplays Changelog - v0.02

Haven't blogged in a while...not good. So here's what I've been working on in changelog format.
  • Tag system now works
    • Multiple tags can be entered (separated by space or commas)
  • Submission now detects duplicate GFYs
  • Pending the GFY name at the end of the URL returns the same GFY each time
  • Back and forward GFYs buttons work (same functionality as back/forward browser buttons)
  • UI changes
    • Removed title, author, and date
    • Search moved outside of menu bar and in header
    • Moved control tools to outside of the menu bar and under the GFY
      • Changed icons
    • Video sizing now a fixed percentage of view-width and view-height
    • Flavor text now changes with every refresh

On a side note, still a lot more work to do before this project is ready!

February 20, 2015

dotaplays Changelog - v0.01

This is an apology post. An apology for not posting when I promised to post every other day in my recent post. So here's an update to what I've been working on this week. It's pretty difficult to stay on track of these blog posts when I have a full-time job and can only dedicate a few hours each day in the evenings to code. So please forgive me for preferring to code a little bit more rather than blog about what I've been developing.

So now I will promise to update weekly on the status of this project. And since it's still not ready for release just yet, I will start the changelog version at 0.01.

Here's the latest changelog for dotaplays (v0.01):
  • Submission now works
    • Can submit either the entire GFYCAT link or just the unique identifier of the gfycat URL
    • Detects NSFW content using the GFYCAT "nsfw" flag
    • Detects empty strings
    • However, there is simply no way for me to know whether or not a submitted GFY is related to Dota or not, unless I want to restrict all submissions to GFYs from the /r/dota2 subreddit
  • Mobile now uses media queries to get a better experience
    • Still a lot more work to do obviously because the page content has yet to be finalized
  • Added a section for possible ads
  • Fixed video sizing and re-implemented the pause/play canvas from GFYCAT embed script
  • Resized various images / icons
  • New logo / favicon

On a side note, I absolutely love changelogs. It takes me back to my childhood when I would read the latest patch notes from World of Warcraft.

February 17, 2015

4orner Changelog v1.02 - Colorblind Mode

Hurray for increased motivation (even if it's temporary).
  • Added colorblind mode (toggle by going to the about section)
    • Each color is now associated with a shape
      • Red - triangle
      • Yellow - hexagon
      • Blue - square
      • Green - star
    • All corners, all enemy balls, the inventory, and the player now have a shape that appears in the center when color blind mode is enabled
  • Fixed the way selecting a menu option interacts with the player
    • Previously, the player would "reset" and be centered on the screen to avoid infinite loops that jump between states of the game
    • Now, when the player leaves the corner, they will reset to black--thus allowing them to select another menu option (even the same one)
  • Fixed player rotation (now player ball cannot be rotated--was obvious with colorblind mode enabled)
  • Changed about text to be more helpful instead of melodramatic
    • Help text changes depending on whether or not the player is on a desktop or mobile

On a side note, play the game here or here!
On a side side note, read about the development process here!

February 16, 2015

Reflecting on Motivation

It's been almost two weeks since I completed my 30 day challenge so I figured I'd post about what I've been doing since then.

It's not a surprise to me that I haven't been doing much. The feeling of completing 4orner was amazing and it was a great achievement on my part to be able to stick it through and make something from nothing. But that motivation and energy seems to be very fickle. Maybe now that I am not publicly working on some project, it's pretty hard to stay focused and on track.

But I want to change that. So I've decided to get back on the horse and start blogging about what I am working on. No need for secrecy--especially if by publicizing I can fuel my motivation. Not sure if I want to do something as intense as a 30 day challenge, but I will promise to post at least once every other day to start with. Let's see how far that gets me before I have to post another apology about my unstable motivation, haha.

On a side note, the project I am currently working on is called dotaplays.

February 05, 2015

4orner Changelog v1.01 - More Multipliers

Now that my #30daydeveloper challenge is over, what's next for me? I am not quite sure but I am incredibly overjoyed at the response my game has gotten so far. It's amazing to hear how my little game has made a positive and inspirational impact on total strangers across the internet. What a world we live in.

I strongly believe that a great game developer is one who listens to the community and continuously strives for that perfection--no matter how far away that may be. So it is my duty to keep updating 4orner as feedback is received.

Today's changelog is titled - More Multipliers
  • Added several new multiplier effects
    • "Two-by-two" - get alternating colors in pairs (red, red, blue, blue, green, green, etc.)
    • "Three-by-three" - same as above but in threes
    • "Four-by-four" - same as above but in fours
    • "Half-by-half" - evenly divided half inventory (five of one color, five of another)
  • Half inventory now reduces the total multiplier by half
    • To balance this, all other multipliers are now applied at half inventory instead of requiring a full inventory
      • I felt that the half inventory was getting little to no play. Not to mention once the levels get higher it's really difficult to hold out for full inventories
  • Added new loading gif
    • With four circles (like the game!)
  • An extra ball spawns every five levels, down from every ten levels
  • Reduced ball speed increase per level by half
  • Added a new functional key - enter
    • Press enter to lock the mouse at the location of the player ball
      • May not be the best strategy late game as the ability to "teleport" from place to place requires the mouse to be unlocked
  • Added a new level in the tutorial outlining that getting alternating colors gives bonus points
    • Might be a bit difficult due to how fast balls spawn in the tutorial

On a side note, thank you everyone for your feedback!
On a side side note, play the game here or here!
On a side side side note, read about the development process here!

February 04, 2015

#30daydeveloper Review

Below is what I wrote for this Reddit post.


Hello, my name is Wonmin (1min) Lee and a long time lurker, first time poster at /r/gamedev. For the past thirty days I have been working on a game called 4orner. Here are some quick and dirty facts about me:
  • I work a full time job
  • I took two computer science classes in college (web and Java) and since then have self-learned everything
  • I challenged myself to work on my game every day starting January 5th for thirty consecutive days
  • Each day I challenged myself to be a “non-zero” day (shout out to /r/NonZeroDay)
  • I am extremely proud of the final result and excited for what this means for my future
The purpose of this post is to document my findings and epiphanies from my thirty day challenge of making 4orner. It is my hope that my experiences can help motivate you to achieve your goals—whatever they may be. (And also motivate myself for any future projects).

My post will be broken down into the following categories:
  1. Motivation and Discipline
  2. Game Design
  3. Technical Difficulties
  4. Project Management

#30daydeveloper - Day 30 - Done

Hello! If this is your first time reading about my thirty day developer challenge, click here to go to the first post!
I am done!
The final product in it's finished glory
  • Implemented PhoneGap, 4orner is now available as a standalone Android app
    • No iPhone version because I didn't have enough time or an iPhone to test with
  • Changed the font size to be dynamic based on window size
  • Changed player size to be dynamic based on window size
    • Still takes ten hits to die / lose
    • i.e. it's marginally harder to grow bigger if the screen is larger
  • Changed ball sizes to be dynamic based on window size
    • Fixed ball body size bug not being accurate leading to incorrect collisions

On a side note, look out for a complete review of my thirty day challenge tomorrow!

February 02, 2015

#30daydeveloper - Day 29 - About Multi-Touch

Hello! If this is your first time reading about my thirty day developer challenge, click here to go to the first post!
Today I decided to finish up how the game plays on mobile browsers. Perhaps tomorrow as my last day I can learn PhoneGap and create a standalone application.
About 4orner, which you should know all about if you've been reading my blog posts, right?

  • Changed the hole sizes to 35% of either the window width or height (whichever is smaller)
  • Removed remaining legacy code from old features (flick to move)
  • Streamlined code to run faster a bit
  • Added about page describing the project
    • Removed settings page--wasn't sure what I would put under settings anyway
  • Added support for multi-touch on mobile devices--two finger tap stops time

On a side note, just one more day left! I can do this!

#30daydeveloper - Day 27 & 28 - Levels

Hello! If this is your first time reading about my thirty day developer challenge, click here to go to the first post!
Only two days left. I can almost taste the finish line (two idioms mixed here). Today, I implemented levels. Every hundred points, the level goes up by one. With each level, enemies move faster. Every two levels, enemies spawn quicker. And finally, every ten levels, enemies spawn in greater numbers at a time. The highest level I managed to get to myself was thirty-one with a final score of 3190. Do you think you can beat my high score?

If you're finding the beginning too slow or boring, here's a tip: since enemies move relatively slowly in the beginning, it's really easy to collect the highest combination of balls to maximize your score with a single submit (alternating, full inventory, and two color). Doing this brings you up to level seven or so immediately, drastically increasing the pace of the game.
The game gets harder with every level every hundred points
  • Implemented levels
    • Every hundred points is a new level
    • Every level enemies move faster
    • Every two levels enemies spawn quicker
    • Every ten levels enemies spawn in greater numbers
  • Implemented a pause screen (press P to pause while in game)
  • Reduced the amount of radius recovery when collecting similar colored balls
    • i.e. When you're hurt, the player's radius gets reduced by five, whereas if you collect a ball, your radius only goes up by one
  • Fixed a bug with inventory not clearing upon game over
  • Reworded the quit and return text (removed periods)

On a side note, I got nothing today for you here.

January 30, 2015

#30daydeveloper - Day 26 - Tutorials and Love

Hello! If this is your first time reading about my thirty day developer challenge, click here to go to the first post!
With only four days remaining, I realized I should probably start writing a bit more. This challenge wasn't just done to create a cool game (in fact I had low expectations of being able to complete a game) but more to figure out about myself and my work habits. The full write-up will be delivered at the end of the thirty days, but as you can see from my blog and my almost complete game, things are going pretty well.
I love this message.
On with the changelog!
  • Quit corner now works, prompting users for confirmation before navigating away to my personal webpage
  • Tutorial corner now works
    • Six levels in the tutorial outlining the basic concepts of the game
    • Repeatable but you can close out by pressing R at any time
  • Added message for restarting the game
  • Fixed a bug with creating enemy balls that wouldn't allow me to properly create multiple balls at the same time

On a side note, I still need to polish up the game for mobile--that might be the final mountain to climb in my challenge.

January 29, 2015

#30daydeveloper - Day 25 - Small Bug Fixes

Hello! If this is your first time reading about my thirty day developer challenge, click here to go to the first post!
Just a small update today.
  •  Pressing a key is now the same as clicking the player ball at the beginning (i.e. removes the "drag me" text)
  • Fixed several small bugs and reorganized code

On a side note, only five days left in my challenge!

#30daydeveloper - Day 24 - Menus and Fonts

Hello! If this is your first time reading about my thirty day developer challenge, click here to go to the first post!

  • Changed the font of the game
  • Added a new favicon for the game
  • Added game menus
    • Settings - not functional yet
    • Help - not functional yet (may be renamed to tutorial)
    • Start - starts the game
    • Quit - not functional yet
  • Removed HTML button and added a loading gif
    • Phaser canvas automatically starts upon finishing loading

On a side note, what do you think of the font? Should I keep it?

January 28, 2015

#30daydeveloper - Day 23 - Restart

Hello! If this is your first time reading about my thirty day developer challenge, click here to go to the first post!
Today was a bit of a slower day.
Game over, try to beat my score?
  • Fixed centering of game over text
  • Added restart game when pressing R after game over
  • Existing balls continue to move randomly after game over
  • Removed ability for balls to change player color
  • Player now can be hit a maximum of ten times of the opposite color before losing
    • Collecting a matching ball increases the player's life count by one
    • Player's size corresponds to the player ball's size (with growing and shrinking animation)
  • Added keyboard support
    • WASD / arrow keys for movement
    • 1234 to teleport to a corner

On a side note, only one week left! How much further can I get?

January 27, 2015

#30daydeveloper - Day 21 & 22 - Game Over

Hello! If this is your first time reading about my thirty day developer challenge, click here to go to the first post!
 Hurray, more changelogs!
  • Enemy balls now change the color of the player upon collision
    • This is kind of an annoying new feature, I might take this out
  • Multiplier texts are now in place to inform the player of the score multiplier
  • The player's size grows smaller when hit by an enemy of a different color
    • Game is over when the player is reduced to nothing
      • Game over text appears properly and the game stops running
    • Player's size grows back when collecting a ball of the same color
      • Perhaps the player's size should also increase depending on the multiplier

On a side note, do you think the multipliers are fair? Or are some of them too many points for too easy of a task?

January 25, 2015

#30daydeveloper - Day 20 - Multipliers Multiplying

Hello! If this is your first time reading about my thirty day developer challenge, click here to go to the first post!
Today's change will be in changelog format because I realized that I love writing changelogs and these posts should've been like this from the very beginning.
  • Stopping time now changes the colors of the enemies to white to better visually represent that you can collect them
  • Multipliers are now in place!
    • Currently there is a bonus to your score when:
      • Full inventory (ten)
      • Half inventory (five or more)
      • Three colors only
      • Two colors only
      • All same color
      • Alternating colors
  • You are limited to ten free kills when time is stopped
  • Added particles for each ball color
  • Increased opacity of enemy balls
  • Stopping time no longer resets the color of the player

On a side note, still need some way of letting the player know which multiplier was activated.

January 23, 2015

#30daydeveloper - Day 19 - Cut the Fat

Hello! If this is your first time reading about my thirty day developer challenge, click here to go to the first post!
Oh my god, I think it's actually fun now. I've been playing my own game and it's quite entertaining. Of course it's nothing like what I first envisioned at all. From sound design down to the core gameplay mechanic, this game is nothing like what I had mocked up on the first day.
See the inventory on top? Those are the balls I am currently holding.
On with today's changes (in bullet format because I am lazy):
  • Removed click to flick mechanic of enemy balls
    • Not necessary anymore given the new gameplay mechanics
  • Removed ball worth
    • Didn't make sense to create an arbitrary incentive to have enemy balls collide with each other
  • Added a ton of new sounds and background music
    • Everything sounds so soothing now. Much different from the upbeat techno trance music I had in earlier versions
  • Added an "inventory" system for holding enemy balls.
    • Now when time stops, you "cash in" your inventory for points.
    • I want to implement score multipliers that depend on what you were holding in your inventory when you stop time.
      • Extra ten points if all ten were the same color
      • Extra twenty points for having at least one of every color
  • Removed the word "score" from the top
    • Didn't find it too aesthetically pleasing
  • Optimized the code a lot
    • Removed unnecessary loops and random console logs
So please, go ahead and try the game. Let me know what you think!

On a side note, I am actually genuinely excited about this. This is a great feeling.

January 22, 2015

#30daydeveloper - Day 18 - Player Colors

Hello! If this is your first time reading about my thirty day developer challenge, click here to go to the first post!

So today I added a limit to the time stop ability. You can now only stop time for 200 milliseconds before it goes on cooldown. However, the game still isn't all too fun to play. It was very cumbersome to stop time and to alter the direction of each and every enemy ball to send them to the correct corner. And given the new time limit, it was pretty difficult.

So I changed it that once an enemy ball touches the player, it disappears. This solved the problem of a million enemy balls cornering the player and a negative score in the tens of thousands. I also changed the spawn pattern to a random location a set distance away from the center of the screen. But yet, it was still relatively boring to play.
The player is now pink, therefore able to collect the pink enemy balls
Here's where I created the player color mechanic. Now you can drag the player ball wherever you click without needing to stop time. In addition, when the player touches any of the four corners, the color of the player ball changes. This way when you collide with any enemy balls of the same color, your score goes up.

In addition, when time is stopped, the player can collect any colored ball for a neutral score. I had to implement this feature because if you cannot keep up with the enemy spawn times, then the number of enemies becomes pretty overwhelming.

I have to admit I am finally at a point where I can see some semblance of fun in this game. I guess I didn't really have a goal or anything when I set out on this journey, but it's really heartwarming to know that my time isn't being completely wasted, haha. At least I'm learning a ton about Phaser. And who knows? This knowledge might go a long way in some future endeavor of mine.

On a side note, game design is really hard. I had always thought that the technical part of actually making the game was the hardest part, but that is slowly proving to be false with this thirty day challenge.

January 21, 2015

#30daydeveloper - Day 17 - Spawn Animations

Hello! If this is your first time reading about my thirty day developer challenge, click here to go to the first post!

Wow turn rates were really difficult. Who would've thought that I should've paid more attention in high school trigonometry class? But I managed to get turn rates working after a good amount of whiteboarding.

The problem essentially was the way angles were being calculated. The ball may be facing -175 degrees, but if the player was 175 degrees, then the logical way to turn was counter-clockwise, but due to the way I was calculating the angle differences, the ball would turn almost a complete 360 degree turn towards the player.

My whiteboard scribbling
Therefore, I had to calculate out each specific scenario of ball versus player angles. What quadrant are they in? Are they negative or positive? Which direction should I turn towards to get the correct angle fastest?

In addition to turn rates, I also implemented spawn animations. Now the balls grow in size before beginning to target the player. Once the ball reaches it's maximum size, it starts towards the player. If the angle towards the player changes, the ball comes to a stop before recalculating the new angle. You can also click on the ball to force an angle change. This mechanic combined with the ability to stop time should allow players to launch enemy balls into the correct corner.

An update wouldn't be complete unless there was a change to the scoring system, right? Now balls don't disappear when they collide with a different colored corner. They just simply go through. Whereas if the corner and the ball color are the same, then the ball's current net worth is added to the player score. In addition, every time a ball collides with another ball, their respective net worths go up. This way, the player has incentive to bounce balls against each other before shooting them into a corner for maximum points.

On a side note, my lower back really hurts.

January 20, 2015

#30daydeveloper - Day 16 - Turn Rates

Hello! If this is your first time reading about my thirty day developer challenge, click here to go to the first post!

Today I cleaned up my code a bit so it's a bit easier to read. Unfortunately because of the nature of this thirty day challenge, I haven't been really keeping my code all too clean. Which is getting to be a problem because of all the stuff I am trying to implement. Perhaps I should have kept that in mind from the beginning.

Since yesterday's major changes, the game currently has no real purpose. The core game mechanic of being able to influence enemy ball directions is yet to be set up. But today I took major steps in the right direction.

Right now, enemy balls move at a constant maximum velocity at an angle. The angle is determined with each step as the angle between the ball and the player. I also created a small white arrow indicating the current direction each ball is travelling in.
White arrows indicate the travelling direction
In addition, the enemy balls spawn from four different locations. Their colors are still random, but that's subject to change. I also made them half the size of the player. This is also subject to change.

On a side note, I really want to implement turn rates but it's proving to be pretty difficult. Perhaps my second mountain to climb?

January 19, 2015

#30daydeveloper - Day 14 & 15 - Time Stop

Hello! If this is your first time reading about my thirty day developer challenge, click here to go to the first post!

Okay so I cheated and combined two days into one post because I was lazy yesterday and didn't feel like posting anything. Maybe I should make Sundays my days of rest. Everyone needs to take a break once in a while, right?

So since I've realized how bad my game was, I have set out on a journey to make it more fun to play. Today, I created a black and white player controlled ball that you moves with the mouse. In addition, when moving the player ball, time stops for the other enemy balls in the game.

I really like the visual and audio effects that are currently in place. When time stops, a large circle expands outward from the player ball and covers the whole game screen. Concurrently, the background music stops playing and is replaced with the sound of a ticking clock. Really cool stuff.
Don't judge my score.
In addition to the time stop mechanic, I also tweaked the scoring system a bit. Now when a ball of the same color as the corner disappears, you gain five points. If the colors are different, then you only get one point. Finally, if any of the colored balls hits the player, you lose five points.

As far as the scoring system goes, everything is still a work in progress and subject to major tweaking or overhaul.

On a side note, I actually can't stop stopping time. This is really fun!
On a side side note, I can't believe I'm already halfway done with my thirty day challenge! I don't know if I'll have enough time to finish, I still feel so far from done.

January 18, 2015

#30daydeveloper - Day 13 - Boring

Hello! If this is your first time reading about my thirty day developer challenge, click here to go to the first post!

This game is terrible! It's so boring and I have absolutely no fun playing it. Even as the creator, it's really hard to muster up any desire to play this game for anything longer than five seconds. Albeit it's still just a prototype and not all the features are fully fleshed out yet, but it's still pretty damn boring.

I am getting more and more worried that no matter how much I polish this game, the underlying core game-play mechanic of "dragging balls to corners" is just simply not fun at all. So I definitely need some form of reworking the major game-play aspects.

First I disabled the ability to drag or flick the balls. This may seem like a step back considering the amount of work I put into learning how to do this feature, but it makes a lot more sense once you consider my next idea.

Next, I enabled a pause time feature. While the mouse is held down, nothing will move and the music will pause. (exactly which button is held down is still subject to change). This is because I want to experiment with semi-real-time and semi-turn-based game-play.

My idea is to create a player controlled circle (with health points perhaps). When this circle is dragged, time stops (or simply slows down, similar to the game SUPERHOT). While time is stopped, you can alter the direction the balls will be travelling, causing them to collide with other balls or one of the four corners.

This might create a much better experience for the player as now you have to dodge balls in addition to trying to get them into the four corners.

On a side note, making games is a lot harder than I thought. Or rather, making fun games is a lot harder than I had thought.

January 16, 2015

#30daydeveloper - Day 12 - Navigating Scoring

Hello! If this is your first time reading about my thirty day developer challenge, click here to go to the first post!

Today I didn't have as much time to tinker as I wanted. There is just simply too much I want to do and it's very difficult to keep on a straight track when my mind wanders and I take so many detours on the way.

Today, I fixed the mobile version, now the game fits perfectly in my phone screen and it works pretty well for the most part. It's just not as fluid as I'd like it to be, but what else can I expect from a prototype, right? I hope that as I keep working on this, it'll become a more responsive experience.

In addition, I also got rid of the timer at the top. I want to experiment with music and spawning the balls to some background rhythm. Then with each interaction create a sound that might all mesh together to create some sick beats. I tinkered with this yesterday when I played with audio, but it just increased load times by over two-fold and was simply unpleasant to listen to. But I hope it'll be better in the final version!

Right now, each ball is only worth five points, but I have plans to add multipliers and other ways of combo-ing them to increase their values. Be on the lookout for that!

On a side note, I'm so hungry right now.

January 15, 2015

#30daydeveloper - Day 11 - Sounds Good!

Hello! If this is your first time reading about my thirty day developer challenge, click here to go to the first post!

Today I toyed around with adding sounds to my game and, I have to say, sound design is really hard. I have no idea what would be an appropriate noise for every single interaction in my game. What noise should the balls make upon collision with each other? What about when they're being sucked into a corner? Should a noise be made when you click on a ball? Does every interaction need a sound counterpart?

I have a general sense of what I want my game to sound like (heavy techno, fast beat / minute) but it's really difficult to find satisfying sounds from royalty free websites. Maybe I need to find a sound designer friend who'd want to work with me, haha.

In addition to sounds, I fixed mobile touch input. Although it loads very slowly on mobile (most likely due to the large sound files) there is not much noticeable lag. But that might also be due to my relatively higher end Android device. I'm sure if you had an older model or a legacy smartphone, it'd run into some frame-rate issues.

I'm still trying to get the mobile version to look better. Currently I am having some issues with the screen width and height. The same issues that I ran into when I had to design my personal website to be more responsive.

On a side note, anyone know of any good free sound databases?

January 14, 2015

#30daydeveloper - Day 10 - Gravity Corners

Hello! If this is your first time reading about my thirty day developer challenge, click here to go to the first post!

So now that the game's prototype is finished, I should start adding bells and whistles to it right? Or should I keep updating the core functionality of the game? Not that the core functionality is all too complex or anything.

I once read an article suggesting that the core game play mechanics are the most fundamental key to a game's success. Every game can be simplified down to 20-30 seconds of "core" game-play that is repeated over and over throughout the game. Therefore, if this fundamental piece of the game is not interesting or entertaining to play, then chances are that the game will also be boring. There's only so much you can polish a piece of turd, right?

I wonder if this is true. Are there any games out there with lame "core" game mechanics, but yet are very addicting and fun to play? Will adding shiny gadgets and score multipliers do more for my game than updating the main game design?

Anyways, today I implemented gravitational pull of the four corners. I thought it was kind of anti-climactic that once a ball touched any of the four corners, it just sort of disappeared without much grandeur. So I changed it to detect overlaps (using the Pythagorean Theorem, who knew math would be useful in real life?)

Maybe I'll add some simple sounds to get a better idea of what my game will look like when played. So here's a short list of future ideas that I am planning on implementing, in no particular order:
  1. Sound effects and music
  2. Menus and settings
  3. Score multipliers and bonuses (kind of like Tony Hawk's Pro Skater combos)
  4. Scoreboard and high scores (local or internet)
  5. Mobile application using PhoneGap

On a side note, wow I guess I still have a lot more mountains coming up, haha.

January 13, 2015

#30daydeveloper - Day 9 - Introducing 4orner!

Hello! If this is your first time reading about my thirty day developer challenge, click here to go to the first post!

Four corners, or 4orner, is the tentative name I've settled on. And I am proud to present the first version that I am proud to call a working prototype. Obviously everything is still largely a work in progress, but this is the first time where I think that my game has the absolute bare minimum requirements to be called a game.
So currently, colored balls spawn in the center of the screen when the timer at the top reaches zero. Then the player must drag the ball to the corresponding corner to increase their score. Once the ball makes contact with the corner, it'll disappear and the current amount left on the timer is added to the total score. Obviously nothing is set in stone and I have a ton of ideas for more content regarding scores like multipliers or bonuses.

So if you've been reading the blog entries in the past, you'd know that I had a problem with getting the trajectory of the ball correct upon mouse release. So the method I settled on is a mixture of the old mouse history velocity method and a directional method.

First, I use the historical positions of the mouse to create a temporary velocity. This way, if you've been dragging the ball for a bit, it'll be faster when you let go. But this led to an issue with sharp turns right before the release of the ball. Therefore, I added a second portion where it'll determine the correct direction the ball should travel in using the position of the mouse during the last two milliseconds. This way, even if you do a sharp turn while dragging the ball, it'll travel in the correct direction upon release.

I still don't know if this method is the most efficient, but it seems to work fine for the interim. Obviously there might be issues with sharp movement that may be faster than the two milliseconds I allotted for, but that seems unlikely.

On a side note, maybe nine days isn't much of an accomplishment to some of you folks out there, but to me this is a huge achievement and I am beyond proud of what I was able to do in such a short amount of time.

#30daydeveloper - Day 7 & 8 - Circular Collisions

Hello! If this is your first time reading about my thirty day developer challenge, click here to go to the first post!

So I had to ditch the old physics engine (Phaser's Arcade) because I think if I want to do collision detection for objects that aren't just rectangles, I need to use an engine that is a bit more powerful. Hence I spent the past two days learning about the P2 physics engine built into Phaser.

With this new engine, I was able to do proper collision detection between two circular objects. Now if you throw the pink ball at the black round corner, it'll detect when the edges of the two circles meet. Before, there was an invisible box that surrounded each circle so collisions would occur even if visually they did not. (Which leads to a bad gaming experience of course).

On a side note, try it out at this link and let me know how smooth the collision detection is!
On a side side note, sorry I didn't publish a post yesterday! I want to say I forgot, but the truth is that I was just too lazy.

January 10, 2015

#30daydeveloper - Day 6 - Circular Bodies

Hello! If this is your first time reading about my thirty day developer challenge, click here to go to the first post!

Today was a bit more relaxing after yesterday's mountain climb (not that I finished climbing it). I played around a bit with sprites and graphics objects in the Phaser framework. I don't know if it's the best solution to use sprites when all I am planning for is a simple minimalist graphics-style. But then again, it doesn't hurt to learn new things.
Pink circles instead of stars (My favorite hexcode, #E86666, the same color for all my personal projects)

On a side note, let's keep today's post sweet and short.

#30daydeveloper - Day 5 - Flick!

Hello! If this is your first time reading about my thirty day developer challenge, click here to go to the first post!

Flick works! Hurray!

Ok, actually it doesn't work perfectly just yet. For the most part it works, except in the cases where I flick the mouse too quickly, then the behavior gets a bit wonky.

What I am doing is keeping a historical record of the past 100 milliseconds of the mouse locations on the screen while the mouse is pressed. Then I am finding the deltas of each two points and adding them together to create a velocity for the object. Then I assign that velocity to the object when the mouse button is released.

I was able to get the idea for the above method from this post. (Thank you Rich from Phaser forums!)

Unfortunately, the method isn't perfect. For example, let's say I move the mouse to the right 500 pixels and then move it quickly a 100 pixels to the left, then the object will still move to the right upon release because the way I calculated was to average up the last 100 milliseconds.

In other words, let's just say that if I've been moving to the right (positive x-axis, positive x-velocity) for four seconds, then switch at the last second to the left (negative x-axis, negative x-velocity) the four seconds of positive x-velocity will overshadow the last second of negative x-velocity. Thus the object will move to the right upon release, although it should move to the left because that's the direction it was travelling in last.

I am satisfied for today though. You can't climb an entire mountain in one day, you have to take it one small step at a time.

On a side note, feels good to get this far already!

January 08, 2015

#30daydeveloper - Day 4 - Failure...

Hello! If this is your first time reading about my thirty day developer challenge, click here to go to the first post!

If you've noticed, I cleaned up my labels a bit more. Namely, I combined the "rants" and "random" labels together. In its stead I created a new label called "technical"--a label about all things technology. I didn't like how bloated my "1min's life" label was getting with all these new #30daydeveloper posts, so I decided to separate it out.

Yesterday I left off at the steps of what I thought was a large mountain. I wish that I could say that today, I climbed that mountain and took in the breathtaking vistas of the future. But, alas, today was the day that I knew was coming--the day I did not do any coding.

I expected to have at least a few days here and there of laziness or busyness. Thursdays are travel days for me so I am usually on an airplane for a large chunk of the day and am really tired when I get home. Unfortunately, because of my current newbie status, I still need the Phaser documentation available online to do any sort of meaningful coding of my game.

So I apologize dear blog reader, today was the first day I did not complete the coding challenge. Here's to a better tomorrow!

On a side note, it's kind of hard to think of a side note for every post when I have to post every day.

January 07, 2015

#30daydeveloper - Day 3 - Mouse Flicking

Hello! If this is your first time reading about my thirty day developer challenge, click here to go to the first post!

I can already feel my motivation waning as each day passes. But to be fair, just because my motivation for this challenge wanes doesn't mean my motivation to develop is waning. In fact, I've been working pretty hard on the other side project that I mentioned in yesterday's post. But I don't think I'm quite ready to reveal what that is just yet.

Anyways, back to my 30 day challenge. Yesterday, I figured out how to get simple collision detection working and learned a bit more about sprites and animations. Today I want to install WampServer so I can test my changes and tweakings much quicker as I don't have to wait for the git push to finish. (Noob alert!)
What the game looks like currently
Then I want to learn how to handle mouse interactions. That way I can mimic finger flicks and be able to move the stars around as I wish--bouncing them off walls or throwing them at the holes. (As was the original game-play) Have you ever seen the Facebook Messenger application? In the Messenger app, you can have little pop-up bubbles for each chat you're active in. These bubbles were the main inspiration for my game. I had so much fun just dragging around the bubbles with my fingers. I wonder if anyone else would as well.

Currently, the most extreme basic form of the game is already in place. Stars spawn from the top of the screen every few seconds and disappear if it comes into contact with the black holes on any of the four corners of the screen. You can also click on each star to drag it to a new position, but it won't alter the existing trajectory and velocity of the clicked star.

Therefore, I want to be able to drag a star and flick it and have it travel in that direction. Initial research has proven this to be a difficult task. Perhaps this will be the first mountain I need to climb?

On a side note, do you know what a GFY is and how it's much better than the prevalent GIF format?

January 06, 2015

#30daydeveloper - Day 2 - Phaser Documentation

Hello! If this is your first time reading about my thirty day developer challenge, click here to go to the first post!

I decided to give up on my challenge...

Just kidding! I haven't given up just yet. I think the fact that I am requiring myself to post a blog about my developing progress each day is motivating me enough to actually do the development work. We'll see how long this motivation will last--possibly only until the weekend when I will become super lazy and decide to stop. Hopefully not though.

This morning I read a Hacker News post that really inspired me. I am really fascinated by this notion of "passive income." In fact, it fascinated me to start a different project that may hopefully be successful sometime in the near future. But until then I shall focus on my #30daydeveloper challenge.

Today I perused the Phaser documentation to get a better feel for what this powerful framework can allow me to accomplish. Having completed this tutorial on creating your first Phaser game, I was able to get an initial understanding of how Phaser works. The first thing that struck me as interesting is the following line from the above tutorial:
It seemed that there are entire physics engines already built into Phaser itself. So this led me to wonder just exactly how powerful is this Phaser framework? After having tinkered with it and reading through the API documentation, I was blown away by how easy it makes every step of the game development process. Everything already had classes and functions created and easily accessed.

That means I might spend more time learning all the correct spelling and formatting of the Phaser nuances than actually coding the game. I might be spending a lot more time reading through the documentation than I had initially expected.

On a side note, check out what I have so far!

January 05, 2015

#30daydeveloper - Day 1 - War of Shapes

Today marks the first day of a new experiment I am doing. Dubbed the "30 Day Developer" challenge. I am taking the next thirty days to try to fulfill my two new years resolutions. For the next thirty days, I will create a working prototype of an idea I had for a mobile game.

Furthermore, I promise that I will...
  1. develop for at least an hour each day.
  2. blog about the day's events and any related events / thoughts.
  3. not give up!
Mock up of "War of Shapes" (name pending finalization)
The game is very simple (as I believe mobile games should be). Several colored balls drop from a chute onto the middle of the screen. The player then used his/her finger to swipe the colored ball into the matching colored corner. The game is meant to be played at an incredibly fast pace (think Super Hexagon). I also envisioned techno-trance music roaring in the background as the user madly swipes at his/her phone.

The game will be developed using the languages I am familiar with--namely JavaScript with some HTML / CSS. I also intend on utilizing the Phaser framework coupled with PhoneGap to wrap it as a mobile application. I don't have much experience with Phaser aside from tinkering around with its Hello World tutorial, and I have absolutely zero experience with PhoneGap. But isn't part of being a good developer the ability to learn quickly on the job?

Currently my work is hosted via Heroku using Node.JS at this link.

Through initial research and half-hazard reading of internet articles, I have determined that the actions of starting the development of a game and finishing the development of a game are the two hardest parts of the process. If that's true, then I am already more than halfway through--on only my first day!

I don't know what will happen in the next thirty days. If history is any indication, I will post an apology one week from now saying that I failed the challenge on day two. Hopefully that doesn't happen and I will learn a great deal about myself by doing this endeavor.

On a side note, please wish me luck!

Resolution 2015

I don't think I've ever carried out a new year's resolution to fruition. Not that I really cared or really tried, but I guess it's just something that we as a society decide to do each year. So I figured I do it again, but maybe this time, I blog about it so I am held semi-publicly accountable to my resolutions.

When I first started this blog back in high school, I used to really enjoy posting. Therefore, my first new year's resolution will be to recapture that enjoyment of blogging.

When I publicly launched my newly redesigned website and blog, I felt a sense of pride and accomplishment. Something I created with my own two hands and plastered on a slice of the internet for anybody to critique or admire! Therefore, my second new year's resolution will be to create something on the internet.

I don't think blog posts count as "something on the internet" because words are just words. I can type trivial nonsense about my daily life as a blog post, but I don't think that'll help either of my two goals. While I don't really know what it is that I want to create, I know that through repeated efforts, I will be able to hone in on that one special something that will be my passion.
  1. Recapture the joy I used to feel when blogging.
  2. Create something on the internet.

On a side note, I really admire the blogs where a developer posts about his experiences daily as he is working on his project. The latest one I've stumbled across is Twelve Minutes. I aspire to have the same level of motivation and discipline that this developer has.

January 01, 2015

New Year, New Me, New Website

Happy 2015 everyone! And a great new year deserves great new things. What originally started out as a small side project to stream-line my personal website turned into a giant overhaul of the entire design. Though I struggled with motivation throughout the whole process, but I am very proud of the outcome. Hopefully with my new website, I can kick off the new year with a fresh attitude and a happier outlook on life.

While I've done some initial testing for compatibility, I don't have access to all the different form factors of the modern tech world. Namely tablets and Apple devices (the Safari browser). So if you are browsing my website and notice something a bit off, then please email me a screenshot so I can troubleshoot.

Also if you've been to my website recently, please make sure to hit the refresh button so you don't have the old version still cached in your browser. But if you happen to be feeling nostalgic, you can see what the old version looked like at this link. If you have any feedback on what you like and what you don't like about the redesign, then please by all means email me your critiques, or post them in the comments section below.

On a side note, I wish everyone a merry 2015 and may all your wishes come true.

A Year in Review, 2014

The best precursor to today’s post would be the post I made about a year ago. I believe that it accurately captures how I felt at the time—full of optimism and energy, with nothing but positive feelings for my future and the year ahead. Now that it’s 2015, I feel disheartened and quite melancholy at the way things have turned out. Therefore, the purpose of this post and my review of the year 2014 is to get my thoughts in order and straightened out as I move into a new year.

Let’s start with my birthday—September 10. It was probably one of the most uneventful birthdays I have had in a while. I turned 23, an age that doesn't really mean anything except for being a Miley Cyrus song. But come midnight of my birthday, with my heart pounding, I was only thinking about one thing—my ex-girlfriend.