我的Uncharted 4開發雜記

Uncharted 4 logo

本文屬於My Career系列文

Here is the original English post.
本文之英文原文在此

註:為方便複製至PTT,本文排版採BBS格式,不習慣者請見諒

Uncharted 4已經發售,終於可以分享我負責開發的部分了
我主要是負責單人模式的夥伴AI、多人模式的戰友AI、還有一些遊戲邏輯
沒有收錄到最終遊戲的部分和一些瑣碎的細工我就略過不提

Continue reading

Posted in Gamedev | 18 Comments

A Brain Dump of What I Worked on for Uncharted 4

Uncharted 4 logo

This post is part of My Career Series.

Here is the Chinese translation of this post.
本文之中文翻譯在此

Now that Uncharted 4 is released, I am able to talk about what I worked on for the project. I mostly worked on AI for single-player buddies and multiplayer sidekicks, as well as some gameplay logic. I’m leaving out things that never went in to the final game and some minor things that are too verbose to elaborate on. So here it goes:

Continue reading

Posted in Gamedev | 30 Comments

我的秘境之旅

本文屬於My Career系列文

Here is the original English post.
本文之英文原文在此

Continue reading

Posted in Gamedev | 6 Comments

My Uncharted Journey

This post is part of My Career Series.

Here is the Chinese translation of this post.
本文之中文翻譯在此

Note: This post was written before Uncharted 4 went gold, so it might contain tones or implications that Uncharted 4 hasn’t gone gold yet. Sorry for the confusion.

I started working on Uncharted 4: A Thief’s End almost two years ago, and here we are, less than two months before release. This would be my first shipped title as a full-time game programmer (I shipped Planetary Annihilation during a summer internship). Looking back now, I realized that I’ve really come a long way since I first wanted to make games more than a decade ago. I would like to take this opportunity to write down this journey to share with you and as a note for myself.

Continue reading

Posted in Gamedev | Leave a comment

DigiPen: 我的遊戲學校

本文屬於My Career系列文

Here is the original English post.
本文之英文原文在此

Continue reading

Posted in Gamedev | 6 Comments

DigiPen: The Game School I Went To

This post is part of My Career Series.

Here is the Chinese translation of this post.
本文之中文翻譯在此

Disclaimer: This post is all about my personal experience with DigiPen and is in no way intended to represent anyone else’s experience or opinions.

I went to DigiPen Institute of Technology to learn how to make games in 2011, and graduated last year (2014). I graduated one year earlier than my fellow classmates in the same year, because I transferred in some credits I had already earned at my previous college in Taiwan.

I have written one post about my life at DigiPen every year on a game design forum in Taiwan. Also, many of my DigiPen friends just graduated and have started their jobs in the game industry. So I thought, why not write a dedicated post about my experience at DigiPen in English on my blog?

Continue reading

Posted in Gamedev | 18 Comments

Game Math: More on Numeric Springing

This post is part of my Game Math Series.

Source files are on GitHub

Previously, I talked about numeric springing and provided some examples.

I have been saving up miscellaneous topics I would like to discuss about numeric springing, and now I have enough to write another post. Here are the topics:

  • Using The Semi-Implicit Euler Method
  • Numeric Springing vs. Tweening
  • Half-Life Parameterization

Continue reading

Posted in Gamedev, Math, Physics | Leave a comment

Apparently, Game Devs Are Considered Non-Threatening to US National Security at All

I would like to share an interesting story about my past two visits to American Institute in Taiwan (AIT).

For people in Taiwan to study or work in the US, they need a student visa or a work visa. Visas are acquired by interviewing with an official at one of the two AIT offices. Luckily, one of them is very close to where I lived in Taipei.

I went to AIT to get my student visa for DigiPen in 2011, as well as my work visa stamp for Naughty Dog in 2015. My experience with both visits told me that, apparently, game devs are considered non-threatening to US national security at all.

Continue reading

Posted in Gamedev | Leave a comment

Subway’s Free Cookie Code Pattern

As a result of going to Subway too many times and taking lots of online feedback surveys in a short burst, I accidentally figured out the pattern of Subway’s validation code you put down on a receipt after taking an online survey, allowing you to redeem a free cookie the next time you visit Subway.

The pattern is actually quite simple:

(Average Survey Score)-(Store Number)-(Date)-(Time)

Look at this receipt for example:

IMG_1365

The store number is 38023-0
The date is 04/17
The time is 12:47.
If I choose 10 for all items on the survey form, the average score will be 10.
The corresponding validation code would be 10-38023-0-0417-1247.

Pretty simple, right?

Posted in Casual | Leave a comment

Game Math: Numeric Springing Examples

This post is part of my Game Math Series.

Source files are on GitHub

So, you have seen how to precisely control numeric springing in my previous post.

I showed this animation as an example.

spring

Manually fine-tuning the animation with animation curves can possibly give better results, if it’s a fixed animation, that is.

One big advantage of numeric springing over animation curves is that it can be dynamic and interactive. For instance, when the springing simulation has not completely come to a stop, and you poke the system (modify the target value or velocity) based on user input, the system can handle it gracefully with numeric springing and everything looks natural. On the other hand, it’s usually hard to interrupt an animation using animation curves and have it animate to a new target value without making it look visually jarring.

I will show you several examples of numeric springing in this post.

Before that, let’s quickly review the spring function presented in my previous post.

/*
  x     - value             (input/output)
  v     - velocity          (input/output)
  xt    - target value      (input)
  zeta  - damping ratio     (input)
  omega - angular frequency (input)
  h     - time step         (input)
*/
void Spring
(
  float &x, float &v, float xt, 
  float zeta, float omega, float h
)
{
  const float f = 1.0f + 2.0f * h * zeta * omega;
  const float oo = omega * omega;
  const float hoo = h * oo;
  const float hhoo = h * hoo;
  const float detInv = 1.0f / (f + hhoo);
  const float detX = f * x + h * v + hhoo * xt;
  const float detV = v + hoo * (xt - x);
  x = detX * detInv;
  v = detV * detInv;
}

Continue reading

Posted in Gamedev, Math, Physics | 7 Comments