Zynger!

Sorry for the lack of updates — I’ve been away at camp for the past year and nine months.

In August of 2011 I was presented with a great opportunity to work as a Software Engineer at Zynga in LA. Zynga is the company behind Words with Friends and Farmville etc and their HQ is in San Francisco. The ZLA studio was a relatively new addition to a growing number of satellite studios, each acting autonomously developing and maintaining their own games. What was so great about ZLA (aside from being commutable) was that the studio was filled with tons of talented people from the game industry, several of whom came from EA and worked on Command & Conquer prior to moving to Zynga.

While indie game development is great, there’s no one else around to challenge or question your decisions. This was going to be a chance for me to collaborate with and learn from professionals while making games… Facebook games.

To be honest, I’m not the biggest Facebook game player, and I wasn’t sure that developing a “Ville” game would interest me, but I took a chance and passed the series of interviews and was offered the position of Software Engineer which I then accepted.

So in September of 2011, I had an official deadline for completing Bowmaster Winter Storm, hence its release (the day before my first day at Zynga LA). Prior to working at Zynga, I was at Honda HQ working as a Flash Developer on technical training software for technicians and advisors at Honda dealerships. It was a tough decision to say goodbye to my friends at Honda in pursuit of advancing my professional career growth, and even more difficult to say goodbye (for a time) to indie game development.

Having never worked (officially) in the gaming biz I had no idea what to expect, and was a bit nervous considering past horror stories concerning work/life balance and crunch time. However, after the first few weeks I could tell this was going to be a great experience. I worked on Empire’s & Allies as it was already live when I arrived, and helped develop several content and feature releases per week (talk about hitting the ground running). And then a few months later I had the chance to help develop a new game called CoasterVille.

The culture was fun and the environment was a blast. The people were all very unique, fun and interesting. We all cared about our jobs, our games, and each other. It was one big happy, yet very functional, family. It was almost too good to be true. There were nerf fights, movie nights, lunches and dinners, and even trips to Disneyland and Universal Studios (research for CoasterVille). This is not to say that it was all fun and games. There was some crunch time and the occasional emergency hotfix, but it was still fun and exciting. And most importantly, the engineering problems and solutions presented through game development at Zynga LA provided several opportunities to learn and grow as an engineer. That was perhaps one of the most uplifting and eye opening experiences as a software development professional working in an engineering team — we were not designated by the tools we used or the computer languages we were most comfortable with, we were all simply “software engineers” whose job it was to solve software engineering problems.

Of course, we all had our particular strengths, and my foot-in-the-door was my expertise with Flash/Actionscript and my passion for developing games. But it was being valued as an engineer in general which was so refreshing.

I proved that I could thrive and did my best to add value to our games with every assignment given. Zynga prides itself as being a meritocracy and through the course of my stay I was recognized for my contributions and even “leveled-up” to a position with increased responsibility and expectations. This motivated me even further to work hard and keep up a “killing it” attitude.

As CoasterVille started winding down, the studio was leaning toward developing the next game which was going to be something in the mobile space. As engineers, we were about to dust off our knowledge of C++ and C# and were expected to become familiar with Unity3D. The engineering leads organized a few code-jams to help get people back into the swing of things, and as time allowed we were encouraged to experiment and develop with Unity3D.

This culture of learning and professionalism is one that I was most impressed with at Zynga LA. Sure we had nerf fights, and dressed casually, but we still practiced professional software development processes. We used SVN and build tools, had code reviews, had spec reviews, held software design meetings, were offered technical training, and created documentation, all the while interfacing and communicating with members from other teams such as production, design, and art.

Sadly, and abruptly, it all came to an end when Zynga Inc decided to close down three of its satellite studios (ZLA included) ultimately laying off 520 employees.

There was little warning and no chance to further reduce the JIRA bugs queue on the morning of June 3rd, 2013, when we were all told in person, by someone I’ve not had the pleasure of meeting until that day, that it was our last day in the studio.

It was a sad day for us all and it was truly unexpected for most as we were a very capable and well functioning studio. CoasterVille was third highest played among all of Zynga’s current Facebook games, and we still had a lot left to offer our users with planned features and pending content releases. I was not privy to the business details as to why it was decided to shut us down, but as they say, it’s all business, and I don’t take it personally.

At ZLA, we all cared about our games Empires & Allies and CoasterVille, and the numbers showed that our users liked them enough to endorse our studio with in-game purchases. These purchases were enough to keep our studio going and help carry the entire company through some rough times, and it was fun while it lasted :)

So here I am. Zynga is officially done with me and just in time for Summer! Time to hit the beach!…err.. I mean update my résumé.

So to recap… Recent Achievements Unlocked:

  • Land a Job in the Gaming Industry
  • Acquire Ticket to E3 (free)
  • Experience a Massive Gaming Industry Layoff

So what does it all mean?!

Well, I’m currently LFG and will be applying for new positions as a professional in an industry of some kind. I’m looking for both gaming and non-gaming opportunities in California in the LA and Orange County area.

As I look for a new full time job, I’ll be working on some new and exciting personal projects which I will describe in later posts so stay tuned. Below is a teaser image of a space game I started developing now that I have more free time. I’ll be using the Starling Framework (used by Angry Birds for their Facebook version).

What’s great about Starling is that it enables Flash to tap into your GPU to provide improved performance and graphics. Imagine my space sim game running at 60fps with cool particle effects. That’s the hope at least. We’ll see what I can come up with.

I may also update Bowmaster Winter Storm with new content.

Stay Tuned!

He’s Alive!

Hello folks, LostVector here. I’ve been quite busy taking care of business and such since the release of Bowmaster Winter Storm last year. I hope you all enjoy it. I wish I had more time to work on it but I just needed to be done and put out there.

So you might be wondering what I’ve been up to lately. I can’t say specifically but I can tell you I’m getting a lot of great software engineering experience making games. I’ve never been more happy with the direction I’m heading with my career. I apologize for the lack of updates. Thanks for your support!

So aside from work I’ve been playing a lot of games. I’m available on Steam and League of Legends as “LostVector” and play something every day. Feel free to join me. Also, I’ve started commentating and recording my League of Legends matches because … I like sounding like a dweeb on the internet? Check it out here:

www.youtube.com/user/jawzoon

See you around and stay tuned!

Bowmaster Winter Storm Codex Preview

Here’s a demonstration of what the Bowmaster Winter Storm Codex will be like. Bowmaster Winter Storm Codex Demo

Example Screenshot:
Bowmaster Winter Storm Codex Demo

This codex will be an in-game resource viewable from the main menu or while playing a mission.

Some of the content and graphics in this demo are still under development and the current version of the game may not reflect the same information in this demo.

Pro Tip: Click on the same unit button again to generate a new random unit skin (where applicable). Try this on the Orc Grunt unit to see the various facial expression he can make.

Bowmaster Winter Storm Update 0.2.26

New skills available! Check out the new Twin Fangs ability in the poison section of the skill shop. This new skill shoots out two arrows that do bonus damage if you’re able to make both hit the same target. In addition to this, the Slice and Blunt arrow have been redesigned with new features! Blunt arrows now stun enemies and Slice arrows cause certain enemies to bleed out (causing damage over time). Enjoy! Play Bowmaster Winter Storm

Coming Soon: Development on the the fabled ‘Bowmaster Codex’ is still underway. Much progress has been made on the functional design and soon development will transition to content creation. The Codex will feature unit descriptions, stats, tips, and explain unit weaknesses and critical areas. This will be an in-game tome-of-knowledge that can be accessed from the main menu or while playing a mission. Stay tuned!

Update: I fixed the bug that caused your army not to spawn; so no more loneliness.

Update: Fixed issues with dragon elemental weaknesses not working properly.

Update: The Curse has been lifted! Shielded Skeletons are no longer way over-powered! (fixed the bug that caused them to heal from any type of damage).

Bowmaster Winter Storm Update 0.2.25

New Profile Management Feature! Import profiles from online to offline and vice versa. Play Bowmaster Winter Storm!

Also, the helmets from last week have been shrunk to better fit the orc’s heads.

Coming Soon: The Fabled ‘Bowmaster Codex’ is currently being written. It will feature unit descriptions, tips, and explain unit weaknesses and critical areas. This will be an in-game tome-of-knowledge that can be accessed from the main menu or while playing a mission.

How To use Import Feature:

Note: You must be logged in for this feature to be enabled (otherwise the Import button will not show up).

Go to “Profiles” from the Main Menu.

Click on the “Import” button at the bottom.

From there you can copy profiles from your online profile list to the computer’s offline profile list (the guest account).

But the really cool feature of this is that any of your offline profiles that you may have created before using an online account will show up in the Offline list (including old offline profiles that may have been created before the log-in system was created).

Another possible use for this feature is the ability to “share” a copy of a profile with someone else using the same computer. For example, let’s say you have a level 25 mage that you want your friend to be able to use. Just log in as you first, then import the profile to the offline side (select it on the right column, click import and see it show up on the left). Then have your friend log in using his account and then go to the import feature and click on the copied profile (on the left side) and click import and now it will be included in his online profile list. Note: this is a way to make copies of profiles so anything your friend does with the copied profile you gave him will not affect your original version.

Also, this Import feature is yet another way to backup your data. If you occasionally wish to “archive” a version of your hero, like a snapshot in time, you can import your hero profile to the offline list. Then once he rank’s up a few levels, you can later import him back to your online profile from the computer you imported him to the “offline” list. Now you have two copies of the same hero to play around with (one version is your current rank and the other is the lower ranked archive version).

Note: you cannot import a profile that has the same name and hero rank.

Forum User Registration Help

If you’re having difficulty registering for a LostVectors.com forum account then you’ll be happy to hear that I’ve relaxed the requirements for registration.

Updates:

1. You no longer need a specific email domain. All email domains are accepted (let’s hope my other spam bot checks are enough to keep them at bay…)

2. You still need to put a code word into the Interests field during registration (this time it is ‘cookies’). However, now you can add other information to “hobbies” and “signature” without it saying you are a spambot.

If you kept getting “That name has been disallowed” messages, here are the reasons why: 1. You cannot have numbers in your user name. 2. Some phrases or words are disallowed. I apologize that this was not made more clear.

Bowmaster Online Log-in Help:

If you registered but get “Invalid User Login Information” when trying to log into the game then:

1. Make sure you activated your account by clicking on the link sent to your email address. If you used a fake email address then you won’t be able to log in.

2. Make sure you type in your username and not your email address on the log-in screen.

3. Make sure you registered for the “Forum” and not the “Blog”. I apologize that these are separate. You need a forum account if you wish to use Bowmaster’s online saving feature.

If you have any further questions or issues regarding forum registration or the Bowmaster Log-in system then please contact me or leave a comment below.

Bowmaster Winter Storm Update 0.2.23

Now you can buy your very own fireworks! Check it out in the “fire” section of the upgrade shop. Play Bowmaster Winter Storm

Updates:

Added Firework arrow – places a bunch of firework rockets on the ground where it lands. Light them on fire and then watch the magic.

Fixed Golem misspelling in tips.

Fixed issues with some death animations (light/dark/fire) — units would always face right upon death.

Copy Motion as Actionscript 3.0 and fl.motion.Animator Bug?

I ran into an issue recently when transitioning from CS3 to CS5.5 when using XML stored motions. The issue involves XML animation code and the fl.motion.Animator class. This is the reason behind some of the recent animation issues found in Bowmaster Winter Storm after moving form CS3 to CS5.5. If you’re a Flash developer please read and tell me what you think.

In Bowmaster Winter Storm I use Flash’s “Copy Motion as Actionscript 3.0” which was a feature introduced in CS3. It copies the Motion Tween information (Classic Tween for CS5) as XML and then you use an instance of fl.motion.Animator class to apply that tween animation to any DisplayObject instance you want. This is a great way to dynamically apply special effects to MovieClips without having to manually copy animation effects on the timeline. This is the tech behind some of the special death effects you see when game characters die (for example, from being struck by lighting and turning to smoke, or getting hit by poison and have their flesh melt away leaving only the bone structure).

So the issue I’m having is that with CS5 and CS5.5 the animation behavior seems to have changed from CS3 even though the code has stayed the same. Below are examples of three different swf files all using the same code. The only difference is which version of the Flash IDE was used to publish each swf.

Get Adobe Flash player

Get Adobe Flash player

Get Adobe Flash player

As you can see. The first animation behaves as desired. The MovieClip retains it’s orientation (scaleX == -1 is preserved) when the animation tween is applied.

For the next two animations using CS5, the scaleX value is reset back to 1.

At first I thought it was an issue with the targetted flash player. So the second animation demonstrates targeting Flash Player 9 using CS5. Despite this, the clip still flips.

Here is the code that is used for all three versions:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// main timeline code at frame 1
import fl.motion.Animator;
var FADE_OUT_xml:XML = <Motion duration="35" xmlns="fl.motion.*" xmlns:geom="flash.geom.*" xmlns:filters="flash.filters.*">
   
   <Keyframe index="0" tweenSnap="true">
      <tweens>
         <SimpleEase ease="0"/>
      </tweens>
   </Keyframe>

   <Keyframe index="34">
      <color>
         <Color alphaMultiplier="0"/>
      </color>
   </Keyframe>
</Motion>;

var clip:MovieClip;

clip = new LibClip(); // LibClip is defined in the Library with linkage id (class name) LibClip -- this is the clip seen on screen with black rectangles
clip.x = 200;
clip.y = 300;
clip.scaleX = -1;
addChild(clip);

var FADE_OUT_animator:Animator;

// called on frame 30
function playAnim():void
{
   FADE_OUT_animator = new Animator(FADE_OUT_xml, clip);
   FADE_OUT_animator.play();
}

Download Source

In summary, for better or worse there is no denying that using the same code but with different Flash IDEs we see different animation behavior. Perhaps the Flash CS3 implementation of Animator was bugged and Adobe fixed it in CS5 or it worked in CS3 and a bug was injected into CS5. Either way, I’ve found no discussion of a change in functionality to the Animator class in the Adobe AS3 reference documentation.

Can any fellow Flash developers out there point me to any more information about this subject? Is there a bug database that I could look at to possibly find more information?

My concern is that even though I’ve figured out a work around to “migrate” my code to get the functionality I desire using CS5, if I change my code and it was a new bug, then what happens when Adobe fixes the bug? Will the functionality change all over again?

If you’re a Flash developer and have had to deal with this issue, what is your take? Which is the correct animation behavior? CS3 or CS5. Obviously I learned to get used to the CS3 behavior but this is not to say that it’s the right way. But consider this: why would the scale property change if the animation xml does not explicitly state to tween the scale property? Shouldn’t all properties not mentioned in the xml retain their original value while only those explicitly mentioned get modified?