selene tan

Resume

by selene on Mar.07, 2010, under

Skills

Languages and Libraries

  • Fluent: Flash Actionscript 2/3, Python,
  • Familiar: C++, SDL, Panda3D, OpenGL, PHP, HTML, CSS.

Concepts and Principles

  • Adept: Object-oriented programming and design.
  • Familiar: User interface design, artificial intelligence.

Education

Master of Entertainment Technology

Carnegie Mellon University, graduated May 2008

An interdisciplinary program encompassing technology and the arts, with an emphasis on interactive media.

Bachelor in Computer Science

Harvey Mudd College, graduated May 2006

Client Work and Employment

Senior Web Developer, Web Developer

Illusion Factory, Jan 2008 – Sept 2009

Developed websites and Flash games for clients from existing specifications and graphic designs. Wrote specifications and documentation to clarify client requirements and aid development. Led development of several projects. Coworkers frequently consulted me for assistance with software design and programming tasks.

Graduate Associate, Creative Development

Disney Interactive Studios, June-December 2007

Developed game concepts for new and existing Disney properties, and created pitch presentations for them.

Endo Patrol: Immunology Video Game

Regenerative Medicine Partnership in Education, January-May 2007

Designed and implemented the user interface for a video game to teach 9-14 year-olds immunology. Done for a semester-long project course at Carnegie Mellon.

Object-Based Storage Device Simulator

Sandia National Laboratories, September 2005 to May 2006

Designed and implemented the load generator for a supercomputer storage device simulator in C++. Done for a year-long project course at Harvey Mudd College.

Elixir Vitae

Professor Elizabeth Sweedyk at Harvey Mudd College, May to July 2005

Programmed an adventure game to teach college freshmen about protein synthesis. Used the C++-based Adventure Game Studio engine.

Course Work

Building Virtual Worlds

September to December 2006, Carnegie Mellon University, Building Virtual Worlds

Created small virtual worlds in two-week rounds. Primary duty was sound and music designer. Also acted as producer and secondary scripter. Worlds included Predator vs. Alien, Prisoner of War, ArtZooka, Treasure Quest, and Turtle vs. Crab.

Astral Schism

April 2005, Harvey Mudd College, Gender in Game Design

In a team, designed and created violent and non-violent versions of a side-scrolling game. My duties were composer, artist, and game balancer.

Available: Astral Schism

PyMotion

October 2004, Harvey Mudd College, Harmony of Sound and Light

Designed a system using Python SDL to create John-Whitney-esque visual music. Wrote a short piece using the system.

Available: http://selenetan.com/portfolio/pymotion.html

Awards

Bully Pulpit Games Owlbear Game Design Challenge

Second Place, August 2006

National Novel Writing Month

Winner, November 2004, 2009

full post

Simple Sudoku and Modes of Thinking

by selene on Feb.17, 2010, under Blog

A while back, I found Simple Sudoku, a freeware Sudoku puzzle maker/solver. It generates puzzles for you to solve, and also has a lot of features to make it easier to solve them. After playing way too much Sudoku in it, I realized why it makes things so much easier. On the surface, Sudoku is all about logical deduction–the 9 in this square means you can eliminate 9′s elsewhere in the row and column, and so on. However, at higher levels, Sudoku is actually about pattern recognition, and that is what Simple Sudoku reveals.

(more…)

Leave a Comment :, , , full post

Fixed bugs in SEEK*TOR

by selene on Dec.20, 2009, under Blog

I finally tracked down the bug in SEEK*TOR that sometimes makes the red enemy square (and some of the ally turrets) unclickable. While I was at it, I squashed a few more bugs I found along the way.


Play SEEK*TOR v 1.2

Changes in this version:

  1. Fixes bug where the upper-left turret is unclickable
  2. Fixes bug where sometimes the red enemy square is unclickable
  3. Fixes bug where on very high levels, the level never starts
  4. Turns off debug flag so turret layouts are randomized between 4 choices instead of just one
  5. Background music now loops

So what caused the unclickable-things bug, and how did I track it down?

With the help of debug output, I discovered that when a turret or enemy was unclickable, it was because something else on the screen “stole” the click event. In the unclickable upper-left turret bug, the click event was going to the flare display in the upper-left. In the unclickable enemy square bug, the click event was going to an object with a name like SpriteXXX. XXX was a number that was larger the later in the game the bug appeared.

The object name was my biggest clue. The number meant that it was a sprite that was created every level. The turrets are created anew every level, but they show up as TurretXXX. So I combed through the code until I found a sprite that was being created every level.

The sprite I found was the little explosion graphic that shows when you click on the enemy turret. In my competition-driven haste, I’d written code that created a new sprite every time the explosion went off, and didn’t bother to make it unclickable, or remove it from the stage afterward.  To fix the bug, I modified the code so that it created the explosion sprite only once and reused it every level, and I made sure the sprite was unclickable. That fixed the bug.

Leave a Comment :, full post

Post-Mortem: SEEK*TOR

by selene on Dec.15, 2009, under Blog

So this was my first Ludum Dare. I did the Global Game Jam back in February, so I had some idea of what to expect, although the GGJ was teams rather than solo. One thing I do regret is not interacting more with the community–IRC, Twitter, etc. I could have used more feedback than I got, instead of relying almost entirely on my husband’s comments.
Friday night I spent brainstorming ideas and thinking over mechanics. Saturday morning I started coding. By late afternoon / early evening, I had the major mechanics implemented, but it wasn’t fun. At that point the turrets were just yellow diamonds (and they were warp portals which your cyan circle teleported between), and the hint circle always disappeared before you could fire again.

Screenshot of older version of SEEK*TOR
Screenshot of older version of SEEK*TOR

The best thing that happened for the game occurred when I sent my Saturday prototype to a friend for feedback. He told me two very important things:

  1. He had the most fun figuring out where the hint circles intersected
  2. He wanted to know why you had to aim and fire to reveal the map instead of just placing light bulbs around the “platforms” (yellow diamonds)

So I made the hints persist but fade over time. That means you can see the hint circle intersections, but the screen doesn’t become overly-cluttered with old hint circles. It also means the aiming mechanic is important, since if you take too long, the previous hint will have faded away. I also changed the theming of the game so that the portals became turrets and you selected a turret to fire from, rather than teleporting between them.
Sunday was mostly a day of polish. The big feature changes were implementing multiple levels, scoring, and flare limits. I also added the start, game over, and between-level screens, made the graphics, (such as they are–hooray for GlowFilter!) composed a background track, and created the sound effects.
In the end, I was successful in terms of having a pretty-much finished game at the end. On the other hand, seeing some of the other entries, I kind of wish I’d done something a little more ambitious…
Things that worked out:

  1. Using abstract glow-y vector graphics instead of trying to draw. (I spent about 20 minutes attempting to draw a single turret before deciding my time was better spent elsewhere.)
  2. The game selects from 4 (hand-crafted) turret layouts and randomizes the enemy and player locations. That turned out to be enough randomization that I didn’t need to make a turret layout generator. In fact, I only just realized that I left the game in debug mode where it always chooses the same turret layout.

Things that didn’t work out:

  1. When I started, I implemented everything in one file just to see if the core mechanic would work. I made such a mess of my code that I spent hours late Saturday night moving code around so I could add levels. Spending hours working on code without actually adding new functionality–even regressing at times–was very hard on my morale.
  2. I spent too long trying to make my git history tidy. I’d keep forgetting to add a file to the commit or not commit for a while and wind up with a gigantic commit that involved 3 features and all the source files. Then I’d try to figure out how to break up or revise the commits. (And how to use vim, since that’s the default git editor…) Given that I never had to revert to a previous version, it was kind of silly of me.

Tools and Libraries Used:

  1. FlashDevelop
  2. TweenLite
  3. git
  4. ACID Music Studio
  5. Free VSTi soft synths: Crystal, LazySnake, and ErsDrums
  6. Audacity
  7. sfxr

(cross-posted from Ludum Dare)

Leave a Comment :, , , , full post

eFusjon RAD Game

by selene on Jul.18, 2009, under Portfolio

rad02_big

eFusjon RAD is a game promoting the eFusjon energy drink, launched in July 2009.

In RAD you control the Efusjonaut, and must absorb eFusjon to neutralize free radicals while avoiding toxins. The Efusjonaut is controlled with the mouse, and can switch between an offensive toxin-eliminating mode and a passive free radical-neutralizing mode.

I came up with the gameplay concept and led the project. A graphic designer came up with the look and feel for the menus and an animator/artist created the main game art and sprites. I incorporated everything into Flash, set up the overarching code structure, and programmed the gameplay and scoring. Other developers worked on the leaderboard score submission, some of the menus, and the instructions. After some testing showed that people were confused about how to play, I came up with and implemented the idea of adding pop-up tutorial messages in-game explaining things.

Links:

  • eFusjon Gaming is the official game website, including details about the promotion
  • eFusjon RAD is the page where you can play the game. Registration is required because the game is part of a contest.
:, , , full post

Information Access in Avalon Code

by selene on May.27, 2009, under Blog

Recently I’ve been playing a DS RPG called Avalon Code. It’s an action RPG where the world is about to end, and you’re the Chosen One who’s been granted the Book of Prophecy to populate the new world. It’s your duty to use the Book to gather information about all the things that will be in the new world by “code scanning” them, which you do by hitting them with the Book of Prophecy. (Apparently the new world is going to have a lot of monsters.)

When you code scan something, it adds a page to the book that describes the object and shows its “codes”. Codes are blocks of different shapes and sizes that represent various qualities, such as Fire, Snake, or Justice. The codes are arranged on a grid (the “mental map”), and you can “rewrite” the codes by swapping them around.

The Sword page and the 4 hot-swap code slotsThe Sword page and the 4 hot-swap code slots.

You’ll find item bases scattered through the game, and you modify them by swapping codes. The above picture shows the Sword base with one Fire code, making it a “Fire Sword”. There are also recipes for specific items, e.g. the set of codes you’ll need to make the Sword into a “Champion Gladius”.

Making the recipes is a painstaking process. You have 4 slots of “holding” space to transfer codes between pages — all other codes have to be on a page. So if you decide you want that Champion Gladius, you have to: (more…)

Leave a Comment :, full post

Replayability in Video Games

by selene on Apr.14, 2009, under Blog

“Replayability” is one of the features that video game boxes trumpet, often with the word “endless” tacked on the front. It’s considered to be fundamentally opposed to “story” — games that brag about their stories, like those in the Final Fantasy series, aren’t replayable. Games like Tetris, are.

The most common way I’ve seen to make a game with story “replayable” is to limit the amount of content you can see in one play-through. Multiple endings, multiple character choices, branches in the story — these are all ways to restrict available content. Of course, games usually limit the impact of such choices, making the replay basically the same as the original. And some gamers don’t even bother with a second run, wasting the effort that went into producing the replay content.

I think the issue is that games with stories tend to have a lot of fluff — not exactly filler, but activities that are only interesting because of the crumbs of story interspersed. Sometimes even the crumbs are boring the second time through, so new content has to be added to entice people into replaying the game.

On the other hand, people re-watch movies and tv shows, and re-read books all the time. (I’ve certainly read my favorite books more than once.) Sometimes there’s new content, e.g. an extended edition of a movie, but usually not. There are two reasons this is more common:

  1. It takes less time to re-watch a movie than it does to re-play a game.
  2. You can skip to the good parts.

Number one I’ve seen addressed a few times in RPGs. The most common method I’ve seen is the “New Game+” mode, where you start the game over but keep your items, experience/levels, and/or abilities from your initial run-through. Since most of your time in an RPG is spent in combat, this speeds up the replay pretty well. In Chrono Cross there was even the ability to speed through cutscene text. (Although at that point I started to wonder why I bothered.) In adventure games it would be nice to have a “solve this puzzle” button available on a second play-through; I haven’t seen that implemented. I suppose walkthroughs fill that role.

Inability to skip to the good parts is what makes the time factor such a big deal — few people are willing to play through 4 hours of game just to get to a single 2-minute cutscene. To some extent you can get around this by making multiple saves; I know I had a lot of saves in Final Fantasy VII just before cool cutscenes or bosses. One issue with this method is that you don’t necessarily know before going in whether a section of the game will be worth seeing again later. Another issue is that it can take up a lot of space, although this is less of an issue now that modern consoles have more than 1 MB/15 slots of space for savegames.

Some games have skipping to the good parts built in. In the recent Half-Life games, once you’ve completed a section, you can choose to start playing from that point. You’re given a standard set of equipment/ammo, and the checkpoints are frequent enough that you can pick almost any part of the game you want to play again. Games in general seem to be getting better at this kind of replayability — Mirror’s Edge and Saint’s Row 2 also make it easy to re-play specific missions. Unfortunately, the games that really need it (i.e., RPGs) don’t seem to bother.

Replayability of the more-content kind is nice to have, but replayability of just-the-good-parts goes a long way towards encouraging me to revisit a game.

Leave a Comment full post

Let’s Shooting Love

by selene on Feb.02, 2009, under Portfolio

lsl_title

I participated in the first Global Game Jam in February 2009, a challenge where the goal was to produce a playable game in 48 hours. The theme was “As long as we’re together, we’ll never run out of problems.

Let’s Shooting Love is a Geometry-Wars-style arena shooter about a lonely robot looking for a girlfriend. It was created in Multimedia Fusion, which we decided to use since one of the team members (Sebastian Jansiz) was an expert in it and promised even faster prototyping than Flash.

I was responsible for designing and implementing the enemy behaviors. I brainstormed a lot of potentially interesting behaviors and played other arena shooters for inspiration. Then I had to figure out how to implement them in Multimedia Fusion, which I had never used before the Game Jam.

I created both enemies and enemy generators, setting them up so that Sebastian could easily adjust parameters such as speed, hit points, and generation frequency. I made a wide variety of enemies, including ones that travel in V formation, ones that circle-strafe the player while firing shotgun bursts, and ones that break apart into smaller enemies when defeated.

Links:

:, , , , full post

Real Video Gaming Prototype

by selene on Oct.06, 2008, under Portfolio

rvg_mainmenu

The goal of the Real Video Gaming project was to create an interactive Flash prototype of a casino interface for a handheld touchscreen device (the Samsung Q1 UMPC). The intent was to allow casino patrons to continue gambling away from the physical tables.

The prototype presents three games: baccarat, roulette, and a slot machine. In baccarat and roulette, bets can be placed by dragging and dropping chips onto the appropriate locations. After the bets are placed or the slot machine is started, a video plays showing a casino dealer playing out the game. In roulette, the user can use the “Languages” menu to change the dealer to one speaking the appropriate language.

I was lead developer for the project. I researched and wrote specification documents, and created the class framework for the program. I also programmed the bulk of the project, excluding the slot machine and drinks menu.

The prototype can be viewed here.

Leave a Comment :, full post

The Admirer’s Secret

by selene on Dec.13, 2006, under Portfolio

The final assignment for my Visual Story class was to create a short, interactive love story. Our group decided to do a mystery with the question “Who sent the mysterious bouquet?” My teammates shot and edited video, took photos, and recorded audio, then handed them to me to integrate in Flash. Some of them also helped put together slideshows and interface elements

Play The Admirer’s Secret (Be patient–the SWF file is 7.5 MB, and there’s no pre-loader since it was meant to be played locally)

The structure of the piece is basically a choose-your-own-adventure. Players choose which of the five suspects to visit, and after visiting them all, the culprit is revealed. There are five endings.

(more…)

:, , , full post

Looking for something?

Use the form below to search the site:

Still not finding what you're looking for? Drop a comment on a post or contact us so we can take care of it!