Author Archives: Mike Pinto

Multiplatform cross-saves

I am very excited to announce that I have implemented multi-platform cross save syncing using your dropbox account. What does this mean for you?  Say you are playing Bik on your phone while on the train.  When you get home, simply sync your saves to dropbox, and then load up Bik on your PC, sync your saves from dropbox and continue playing right where you left off.  All of this happens from a menu within Bik!  This also means you can easily share saves with friends or on the internet. Cross saves currently work between Mac, Windows, Linux, Android, and coming soon to iOS.

dropbox-logos_dropbox-logotype-blue

Posted in DevBlog, News | Leave a comment

Beta testing.

Hi everyone,

We’ve been working really hard on Bik this past year and are getting ready to release the full game in the coming months!

The game is complete and has been in testing for a couple months now, so the focus for this beta is getting feedback for the difficulty and clarity of puzzles. If this sounds interesting to you please sign up using this form: https://docs.google.com/forms/d/194v7dzQ6OTqVHIHGIfVrSqiVl55TDJEzwfZNv9adutY/viewform

Thank you everyone for your support! If you have any questions please leave a comment or send us a message.

Posted in News | Leave a comment

Bik at PAX East Indie MEGABOOTH!

We are very excited to announce we will be showing as part of the Indie MEGABOOTH MINIBOOTH at PAX on Saturday (4-12).  Stop by, say hello, and play Bik!

More about the MEGABOOTH

banner_east

Posted in News | Leave a comment

Patching a game

Recently I decided to figure out how I would implement patches for the PC version of Bik.  At first I figured I would just have the player download the entire game again. But because of all the music, the download file will be about 150megs.

(more…)

Posted in DevBlog | Leave a comment

Closing in on a beta!

As March approaches Bik finds itself getting closer and closer to a beta release!  All of the main puzzles, music, and story elements are in place. We are currently adding final dialogue for each level that is really helping to tighten up puzzles,  story, and flesh out the environments.

Our full trailer is coming soon. While your waiting, here are a couple animated screen shots and a new music track from Bik.  (The soundtrack is currently sitting at 1hr 16minutes of original music!)

Bik_CabbieTalk Bik_Chompers

Posted in News | Comments Off on Closing in on a beta!

Sorting 2D sprites

As sprites move around the screen in an isometric 2D adventure game, they need to show up in front of and behind other sprites as they move.  Most of the Unity 2d tutorials only address basic sorting and mainly in side-scroller type games.

The way I solve this in Bik is to attach a Baseline.cs script to any sprite that needs to move. If the sprite moves in the XY plane, the script will calculate the Z index depth that the sprite should be at.

Make sure the sprite is aligned bottom so it’s feet are at the transform coordinates of the sprite GameObject.

Here is a simplified version of the script I use in Bik.

//store the new Z position
float newZPos;
//the camera looking at the sprite
Camera cam;
//the local transform for speed
Transform trans;
void Start()
{
cam = Camera.main;
trans = transform;
}
void Update()
{
//don't run if sprite is not visible to any camera
if(!renderer.isVisible)
return;
//store the viewport position of this GameObject.  
Vector3 viewportPos = cam.WorldToViewportPoint(trans.position);
//now we convert our position in the viewport to a usable number for the z order.	 
//This will always give us a number between 0 and 5. based on the Y value from the viewportPos.
//0 will be the top of the screen and 5 would be the bottom. In the isometric view, objects higher on the screen would be "behind" objects lower on the screen.
newZPos = ConvertScale(viewportPos.y, 0,1,5,0); //See my convert scale method below
//change the Z position of the GameObject to the newly calculated position between 0 - 5.  
trans.position = new Vector3(trans.position.x,trans.position.y,newZPos);
}
//this is a static float I use to convert scales.  This is normally placed in a helper script, but i'll show you it here.
public static float ConvertScale (float old_value, float old_min, float old_max, float new_min, float new_max)
{
float new_value = ((old_value - old_min) / (old_max - old_min)) * (new_max - new_min) + new_min;
return new_value;
}

 
Instead of running this in the Update it would be smart to have this script subscribe to a C# event on your Movement script for this character/object. So when the character moves this would be run in a coroutine and then stopped when the character stops moving.
Check out my previous posts for more about Events.

Or just have this as a method directly in your movement script!

Hope this helps someone out! Let me know any questions or comments!

 

Posted in DevBlog | 5 Comments

Sequences Revisited

I’d like to show a little more detail on the various types of sequence events.

I’m going to share some xml to demonstrate what happens in a sequence.

Here is a part of a sequence in the game.
First: Tatenen walks to coordinates -3299 x -182
Second: Ammut walks to coordinates -3299 x -244
Third: FadeIn the camera and take 1.5 seconds to do it.
Fourth: Wait 2 seconds while the fade takes place.

Tatenen walks left
Ammut Walks left
Fade back in
wait for fade

What is the meaning of this?

To run this sequence I have a sequence controller script that will parse this information as coroutines so that we can “yield” to each line.
The NPCWalkToPoint runs code which looks like this (note* this is not the code directly. The real code is much more generic than this. But for demonstration I thought this would be more useful to a beginner to see it fully broken down.):

float x = float.Parse(node.Attributes["x"].Value);
float z = float.Parse(node.Attributes["z"].Value);
string NPCName = node.Attributes["object"].Value;
//send the npc name and coordinates to a method that makes that npc walk to the coordinates.
yield return StartCoroutine(Movement.NPCWalkToPointNoYield(new Vector2(x,z),NPCName));

The next event would be a FadeIn.

float time =  float.Parse(node.Attributes["FadeIn"].Value;
yield return StartCoroutine(ScreenFade.FadeIn(time));

The Wait event

float time = float.Parse(node.Attributes["wait"].Value);
yield return StartCoroutine(Timer.Wait(time));

Make sure the NPC has stopped moving and has reached its destination

string NPCName = node.Attributes["object"].Value;
yield return StartCoroutine(Movement.WaitForNPCToMove(NPCName));

Speak some dialogue!
What is the meaning of this?

string charName = node.Attributes["spkChar"].Value;
string spkType = node.Attributes["spkType"].Value;
string textToSpeak = node.InnerText;
yield return StartCoroutine(Speach.speak(charName,spkType,textToSpeak);

I have probably about 100 or so event types setup in this manner and I constantly am adding more. The idea is to make any events be scripted through the XML and not in code. The sequence controller will parse the xml and run specified methods that do all the work. You could make a very simple visual editor based on this method for scripting events.
Hopefully this gives you some ideas!

Posted in DevBlog | 4 Comments

December Update!

Hey, Everyone!

Just want to give you all a quick update. Bik is still alive and currently in alpha testing. I’ve been super focused these past six months on finishing the programming and music for the main storyline of the game, and I’m happy to say that the game is now playable from beginning to end!

We’re preparing to release a trailer in early 2014, but in the meantime, here are some new-and-improved walking animations and a couple of screenshots to tide you over!

Hijacking_AlphaScreenShot

BossTorture_AlphaScreenShot

Bik_Side_Walk

Ammut_Side_Walk

Posted in News | Leave a comment

The Planet Baste

The planet Baste is a gas giant whose inhabitants live on large floating land masses. The squeeg plant is a major export for the planet Baste, as it is a delicacy to many alien species, including the people of the planet Set.

For many years, independent farmers would directly sell their squeeg harvest to buyers through one of the many orbital marketplaces. In recent years a large corporation has built its own orbital station where it directly sells its unusually large volume of squeeg plants at a fraction of the price charged by the independent farmers.

BasteFarm1

Baste_farms_Cropped

Baste

Posted in News | Leave a comment

Great review of the demo from IndieStatik.com

Check out this great review of our teaser demo from IndiStatik.com!
” I became the weird sausage-headed being of my dreams and had the privilege of walking around its 70s-chique ship.”

“And oh, my, yes, the EFFING SOUNDTRACK! . . . People, it’s wonderful!”

http://indiestatik.com/2013/03/27/bik/

Posted in News | Leave a comment