Swift's Journey WIP

Hi all,

I’ve decided to start making my School Project today. I’m going to keep this thread updated with WIPs, hopefully daily.

The reason for this is because I found this community’s feedback immensely valuable, and I’m sure it will keep me motivated to the end.

So, here goes:

What is it? A side-scrolling action adventure set in fantasy medieval times. The game tells the story of Swift, a young adventurer who set out on a journey to The World Beyond The Sea. Discover new lands, fight monsters, solve puzzles and make a name for yourself as a Hero or a Villain.

Engine This game will use the Unity3D engine. Previous consideration was given to Flash, but it seems this engine is more appropriate.

I’ve got an Excel sheet with a bunch of game elements, Quests, Items, Enemies, and stuff.
But first I want to build the Player controls.

[DAY1] Built a small Training Hall, and made a script to move left/right and jump. Walk with A/D and jump with W:
http://www.puppeteerinteractive.com/gallery/games/Swift/WIP1/

[DAY2] Tried to draw a concept for the main character. I had a mental image of him (Zelda’s Link), but couldn’t draw it right, so I jumped straight to modeling it, which turned out to be even harder :smile:. Anyway, I finally just made a rudimentary model and tried my luck at character animation. Didn’t work out so well either, but I’m content with the current placeholder which allowed me to script some animations into that walking box.
There are 6 animations so far: Idle, Walk, Idle Jump, Idle Fall, Walk Jump, and Walk Fall:
http://www.puppeteerinteractive.com/gallery/games/Swift/WIP2/

[DAY3] Made the camera more responsive.
Added several behavior states for the generic enemies. These are:

  • Idle: Moves slowly and randomly back and forth, staying around his initial spot.
  • Alert: When the player gets too close, he is spotted by the enemy. Then the enemy gives chase.
  • Chase: moves faster towards the player. If the player gets out of chase range, the enemy goes back to alert state. After a while he goes back to Idle state.

http://www.puppeteerinteractive.com/gallery/games/Swift/WIP3/

[DAY4] Added health for the player. Added Touch damage to the enemy (If you touch it you get hit). Later I’ll also have attributes for Melee/Projectile Range and Damage.

To test this I modeled a generic Blob enemy with an animated slimy texture and a coin inside it. The slime is also an attribute that can be set in the inspector.

http://www.puppeteerinteractive.com/gallery/games/Swift/WIP4/

[DAY5]

  • Added a health bar for the enemies. When dying, they explode and then drop treasure.
  • Added an Attack script for the player, click to throw a projectile. The player will also have a Touch or Melee attack based on his equipment, but that’s for later.

http://www.puppeteerinteractive.com/gallery/games/Swift/WIP5/

[WEEK1]

[DAY11] I’ve been slacking too much lately, I should do more progress…
I decided to make a game mode called the Gauntlet, it’s a separate game mode from the main game, telling the story of a prisoner forced to endure a series of deadly challenges, all for the pleasure of a sick-minded Prince and his posse. You can read more about it in this WIP doc:
http://www.puppeteerinteractive.com/gallery/games/Swift/WIP11/TheGauntlet.docx

Also added a Health Potion to the game:
http://www.puppeteerinteractive.com/gallery/games/Swift/WIP11/

The general concept and the story for the main game is starting to build up in my mind, I’ll post it once I can get it in a doc.

Tomorrow I’ll start making some traps for the Obstacle Course section of the The Gauntlet. You can read about The Gauntlet in the doc above.

I plan to put in a couple of hours everyday, and keep posting here for your feedback.

Soo… Good Luck to me :smile:

Good start!

:smile:

It might be a good idea to see a little further, ahead the character :slight_smile:

Agreed. Rather than have the camera (naturally) lag behind the character, I’d like to see it reversed so the player gets a better sense of what’s coming up. Nice start though.

Yeah, you’re absolutely right.

(UPDATE): I added a zoom out (fieldOfView) based on player’s distance from the camera, and a LookAt ahead of the player.

Very nice work on the camera. Not really much to crit yet, but I’ll definatly keep an eye on this project.

Keep it up man!

[DAY2] Tried to draw a concept for the main character. I had a mental image of him (Zelda’s Link), but couldn’t draw it right, so I jumped straight to modeling it, which turned out to be even harder :smile:.

Anyway, I finally just made a rudimentary model and tried my luck at character animation. Didn’t work out so well either, but I’m content with the current placeholder which allowed me to script some animations into that walking box.

There are 6 animations so far: Idle, Walk, Idle Jump, Idle Fall, Walk Jump, and Walk Fall:
http://www.puppeteerinteractive.com/gallery/games/Swift/WIP2/

Pretty sweet (though he seems to have a bit of a nervous twitch in his left foot, just kidding) :).

Pretty good work :slight_smile:

Coming along nicely! Keep with the updates 8)

Thanks for the support!
Baby steps, but steps nonetheless :smile:

[DAY3] Made the camera more responsive.
Added several behavior states for the generic enemies. These are:

  • Idle: Moves slowly and randomly back and forth, staying around his initial spot.
  • Alert: When the player gets too close, he is spotted by the enemy. Then the enemy gives chase.
  • Chase: moves faster towards the player. If the player gets out of chase range, the enemy goes back to alert state. After a while he goes back to Idle state.

http://www.puppeteerinteractive.com/gallery/games/Swift/WIP3/

Couldn’t get the camera to smoothly include the enemy and the player in frame while being chased, will try to do it some other time.

Tommorow I’ll add health for the player, and make the enemies attack him.

[DAY4] Added health for the player. Added Touch damage to the enemy (If you touch it you get hit). Later I’ll also have attributes for Melee/Projectile Range and Damage.

To test this I modeled a generic Blob enemy with an animated slimy texture and a coin inside it. The slime is also an attribute that can be set in the inspector.

http://www.puppeteerinteractive.com/gallery/games/Swift/WIP4/

Tommorow I’ll make the player attack and kill enemies. Maybe also add droppables like the coin inside the Blob.

Great stuff! You’re making impressive progress. How long would you say you’re spending on this each day, just out of curiosity?

I like the style you give to your games. Also the silhouette of your placeholder character looks nice, very zelda-ish. And you pay attention to detail, like puff cloud and the exclamation mark. Looking very nice!

@Novodantis: I’ve had 2-3 hours work a day since I started, but it’s starting to get more complex now so I would spend more time learning than actually doing progress.

@dogzerx: Thanks! My guidance in game design here is definitely Nintendo, mainly Zelda and Mario.

[DAY5]

  • Added a health bar for the enemies. When dying, they explode and then drop treasure.
  • Added an Attack script for the player, click to throw a projectile. The player will also have a Touch or Melee attack based on his equipment, but that’s for later.

http://www.puppeteerinteractive.com/gallery/games/Swift/WIP5/

Tomorrow I’ll make the projectile shoot in the direction of the mouse cursor. Maybe I’ll also make the player’s head actually look in that direction.

The game looks like it’s coming along nicely, I enjoy the style of the game and the daily progress updates, very cool. Keep up the good work.

How did you do the health of the blob?

5 hit points health for the blob.

Each time the blob is hit by a sphere subtract 1 hit point

If no more hit points exist blow blob up and drop a coin?

@GrimWare:
This is basically the code that shows health, destroys the blob, and drops an item:

var Health:float = 10;
var DyingEffect:Transform;
var Droppable:Transform;

private var HealthCurrent:float;
private var Delay:int = 0; //A general delay value used for various actions. counted in frames
private var HealthBarPos:Vector3; //The position of the health bar
private var HealthBarWidth:float;
private var DyingWiggle:float = 0;

function Start()
{
HealthBarWidth = transform.Find(“HealthBase”).guiTexture.pixelInset.width;

HealthCurrent = Health;
}

function Update ()
{
//update health

if ( HealthCurrent > 0 )
{
HealthBarPos = Camera.main.WorldToViewportPoint (transform.position - Vector3(0,0.1,0.15));
transform.Find(“HealthCurrent”).position = HealthBarPos + Vector3(0,0,1);
transform.Find(“HealthBase”).position = HealthBarPos + Vector3(0,0,-1);

transform.Find(“HealthCurrent”).guiTexture.pixelInset.width = Mathf.Round((HealthCurrent/Health) * HealthBarWidth);
}
else
{
transform.Find(“HealthCurrent”).guiTexture.enabled = false;
transform.Find(“HealthBase”).guiTexture.enabled = false;

BehaviourState = “Dead”;
}

//Dying
if ( BehaviourState == “Dead” )
{
DyingWiggle += 0.01;

transform.localScale.x = (1 + Mathf.Sin(Time.time * 20 * DyingWiggle)) * 0.1 + 0.9 + DyingWiggle;
transform.localScale.y = (1 + Mathf.Sin(Time.time * 20 * DyingWiggle + DyingWiggle * 0.5)) * 0.1 + 0.9 + DyingWiggle;

if ( DyingWiggle >= 1 )
{
Destroy(gameObject);

Instantiate(DyingEffect, transform.position + Vector3.up * 0.1, Quaternion.identity);

//droppable
Instantiate(Droppable, transform.position + Vector3.up * 0.1, Quaternion.identity);
}
}
}

Had to put off work on this for a while, been busy doing something else:
http://www.puppeteerinteractive.com/gallery/games/UFO3D/

Anyway, I’m back working on Swift’s Journey now. Added some new stuff. It’s becoming a lot more complicated , with each new feature producing many potential problems I haven’t thought of at first.

You can play what’s done so far here (It’s VERY buggy, and the gameplay is mostly ruined by my bad choice of hit detection method):
http://www.puppeteerinteractive.com/gallery/games/Swift/WIP8/

Middle Mouse Click to switch between Sword and Bow. Hold the Left mouse button, then release to shoot an Arrow.
Press 1 for the Bomb, and 2 for the FireBomb

The new things added are:

  • 2 weapons, a Sword and a Bow. The code for the flight trajectory of the arrow is thanks to this script from the Unify project: http://www.unifycommunity.com/wiki/index.php?title=LookAtMouse

  • A Utility Belt. You’ll have different Throwable/Consumable Items there. Currently you have a Bomb which rolls on the ground and explodes after a while, and a FireBomb which does a trail of flames on the floor in front of the player.

  • Damage shows when you hit the enemy. The damage caused by the bow depends on how long you hold it.

The main problems I encountered are caused by the hit detection, which is based on Colliders. This causes everything to get stuck in everything else :smile:, and even when I make some objects ignore each others colliders, it still doesn’t go well. So you’ll see the FireBomb explode in your face, the Bombs roll of the bridge, and the player getting stuck on invisible colliders. It’s one big MESS!

I think I should use RayCasts instead, anyone knows what the benefits are, or if I should use it at all?

Oh, I also improved a bit on my placeholder model. It’s now a single mesh. I’m trying to learn how to rig it, and texture it properly with a UVWUnwrap. Here’s the mesh:

I could help you on Unwrapping. And probably rigging (depends of how much time I can get)