Ana Stepić

Game Developer

216

49

Bloom!

Thank you for taking your time to read this.  

Feel free to ask any questions and give critique or suggestions. Receiving your feedback makes me happy. SO happy that I made a special feedback box where you can suggest new features and report bugs:

                                                      Bloom! Feedback Box

If you like my project and are interested to see and hear more about it please hit the Like button.

                                                                                                                                                   

About Bloom!

You are a little leaf floating on the surface of a lake. Many beautiful flowers are blooming just above you, but it's summer and the sun is hot! If you don't do something all those beautiful flowers will dry out and wither!

Bounce droplets of water up to the flowers to quench their thirst but be careful not to hit any butterflies!

                                            Play the most recent version here

Controls:

  • Press SPACE to shoot the water drop
  • Press P to pause the game
  • Use mouse movement to control the leaf

                                                                                                                                                   

Now you can play an prototype version of Bloom Jump as well! It only has a few features currently, such as score system, "never ending" level system and collectable items. But more will be added in the future.

I had trouble instantiating playmaker FSM that uses iTween actions so I'm using simple translates. Notice how the background is paralaxed - higher up you are, different things you see!

                                                     Play Bloom Jump Here

Controls: 

  • Use the arrow keys to control the water drop

                                                                                                                                                   

RESOURCES:

I noticed a lot of people are wondering how to adjust the collisions of the ball in the Breakout project to be more Breakout-like. Many of you are also wondering how to make it so the player is able to control the trajectory of the ball by its collision with the paddle.

So I wrote a C# script that does all of the above and thought I would share it with all of you. If you use it in your skillshare project you are required to give me credit in your project description linking back to my project. Other than that you can use it free for whatever purpose.
If you like it please show your appreciation by dropping me a like.

Enjoy!

DOWNLOAD

The instructions how to use the script are written on the beginning of the file but I will paste them here for your convenience:

                                                                                                             
WHAT DOES IT DO?

 This script when put on the ball object adjusts velocity of the ball upon collision to be realistic and predictable. As such it makes playing the game more enjoyable. It also adjusts how ball collides with the paddle in such a way that player can get any reflection angle from set Min and Max depending on the point on the paddle where the collision occurred. More left the collision point is the angle is lower, more right and the angle is higher.

                                                                                                             
HOW TO SET IT UP?

  1.  Copy paste this script into your project
  2.  Drag and drop it onto the ball object
  3.  In the Inspector set up the variables in a following way
    • Drag and drop the paddle object to the PaddleWidthRigidbody variable. The paddle has to have a rigidbody attached
    •  Set up a Minimum and Maximum reflection angle you want to allow. You can experiment with these two until you find the desired behavior. Or you can leave them at their default values.
    •  Set up a desired Speed of the ball. This is the speed your ball will be moving at. Easiest way to set it up is to just run the game and adjust it at runtime until you find the perfect value. If you wish to change the speed at runtime for any reason you can do so by changing the Speed property.
  4.  Enjoy your new Breakout-like ball behavior

                                                                                                                                                   

UPDATE 4 (Game Version 0.3)

This has been a long week, both for me and for Bloom. 
Finally now you can enjoy playing Bloom with sounds. The music theme you can hear in the background is an original written by my husband.
Other sound effects are mostly from http://www.freesfx.co.uk , it's a great site with many free sound effects you can use in your games. If you play Bloom you can notice that when ball collides with something it triggers a different sound effect each time, and that the mute button mutes all sounds in the game. 

All of that was not only possible but easily achievable by using Audio Toolkit. It is a great addition to Unity you can find on the asset store. It has a free version: https://www.assetstore.unity3d.com/#/content/2679

I've also made hitting flowers more enjoyable - now flowers animate after being hit and cause a particle effect to burst out. The ball collision is now more predictable but still not how I want it to be, further fixes are coming in the future. Also, now you get more points faster you clear a level - more specifically, you get a time score bonus upon clearing a level.

I also added a few more levels you can play through - totaling to 5 levels! And when you're done playing you can submit your score to the Leaderboards! That's right, now everyone can see how great of a player you are! Leaderboards are made using dreamlo.com. They even have a free plugin for unity on the asset store.

II also took time to make some more interface elements in the Bloom theme, so now almost all UI elements look like they belong to the same style.

I had some trouble with enabling and disabling windows. You see, almost all unity functions used to find objects find only currently active objects which means that if you want to do some work with a disabled object (most likely, enable it) you have to keep a reference to it somewhere because finding it at run time is tedious.

I also had some trouble with persisting objects. Some objects, like player data are supposed to be kept after a scene load. For example, when a player finishes a level and advances to the next level his score and other data is supposed to be kept. You can do that by marking an object with Persist through scene load, that way unity wont discard it after a new level loads. The problem with that is if you need to load a level where you create such an object more than once. For example, if you create the player object on your start screen and then you load level 1, but then the player loses and is returned to the start screen. In such a scenario a player would be initially created, persisted through scene load, and then when Game start scene loads again, another player would be created. You'd end up with 2 players that persist through scenes and each time you go back to the game start screen you'd create another one. 

That's why I created a level whose sole purpose is creation of base objects that have to exist through the entire game. The level loads only once, when the game is first run, so there will be only one instance of those objects at all times, and then quickly loads the next scene. The delay is not noticeable by players - to them it seems that the first level loaded is the Game Start screen when in reality there is a non-visual level loaded before it.

Some people reported they had trouble playing the game because their screen sizes were too small and they couldn't see the whole game window. I thought about that problem and realized I need to make it so the webplayer size is adjustable. So I put it to adjust to the window. However, the game is designed to run at a specific aspect ratio and when that is not respected a lot of things that are not supposed to be seen appear on the screen. So in the end, I ended up writing a javascript function that will resize the webplayer on window resize but maintaining the aspect ratio.

So now you can play Bloom! on pretty much all screen resolutions. You can even watch a movie split screen while playing Bloom.

I also spent some time writing a in game helper that will give players handful tips while playing. It might seem silly since bloom is a simple game but once I start adding drop bonuses and butterflies it won't be so simple. So I thought it would be nice if the helper told the player what a certain dropped item does if picked up the first time it drops. 

It's not ready yet, while it does work, it is not organized as it should be and there is still no higher need for it so I'll be polishing it until it's perfect. I'll also add bonuses as soon as I can.

I really enjoy working on Bloom and I intend to keep developing it until it's the best Breakout game out there! Thank you for bearing with me and seeing Bloom…well…bloom!

(I'll post a change log tomorow, it's 5 AM in my time zone and I am very tired.)

                                                                                                                                                   

UPDATE 3 (Game Version 0.2)

Bloom! now has a new logo. The old logo was only a quick concept in photoshop. The new one is supposed to be more fitting to the theme of the game. Also the game itself now looks exactly as the concept design done in photoshop.

I added a start screen as well so you are not pushed into the game as soon as the player loads. Currently the only option on the start screen is "Play" but as the game progresses more options will appear, such as "Leaderboards" and "Options".

 

The strange flower layout is the doing of a flower generator. It is a C# script I wrote that generates given number of flowers on to the branch. This way Bloom can have endless variations of the same level. The way the generator works is by placing paths on the tree branches, each path is than assigned a number, a constant telling the generator how many flowers can that branch maximally hold as to not be too crowded.

When generator starts it looks up the number of flowers it needs to generate and relative to the number of max flowers the each branch can hold gives out flowers. The flower types are prefabs that are also given to the generator, they tell him which scale range is acceptable for that flower and what score range it has. When given to the generator a ratio number is also given telling the generator how many of those flowers it needs to generate relative to the number of flowers it needs to generate

The GUI is done with NGUI free version. NGUI is a unity plugin that most of unity developers use for their user interfaces. It has a pro version and a free version. You can read more about it and download a free version on the official site. The site also has great tutorials to get you started with NGUI.

My GUI setup currently consists of four anchors.

  • Bottom-Left anchor fixes my life counter to the bottom left of the screen at all screen resolutions. The life counter are just water drop sprites that change visibility according to the player lives. 
  • Bottom-Right anchor displays score. It is made of a NGUI label and a flower sprite.
  • Upper-Right anchor fixates a Pause button. The pause button is a NGUI Image Button that has different images for Hover, Click and Normal states. When pause button is clicked it disables itself and enables the play button, and vice versa.
  • Center anchor fixates "Paused" sprite that is shown only when the game is paused. It also fixates the background flower texture that also appears when the game is paused and moves towards bottom right. The movement of the flower texture is done by using a custom shader that changes the uv mapping of the plane it is applied to. The time in the shader is updated via script because if default time is used the texture wouldn't move when the game is paused. If you know of a better way to do this please tell me.

If you played the game, you might have noticed that the ball deforms as it flies through the air. That is also a work of a custom shader that my husband wrote for me. I don't know the details about it but if you are interested I will ask him.

Upon ball collision with the water I've added a particle effect of water ripples and splashes. Water ripple particle system is also attached to the leaf so the leaf causes ripples as well.

Change Log:                                                                                      

Improvements

  • improved leaf appearance and collision
  • improved water appearance
  • improved ball appearance
  • on game start and death the ball appears on top of the leaf and waits for player input instead of shooting off on its own

Additions

  • added a life count display
  • added a pause/unpause button
  • added a pause screen
  • added a random level generator so you can continue playing forever
  • added ripple particle effect on ball collision with water
  • leaf now causes a ripple effect on the water
  • water drop now has a new slick shader

Fixes

  • collisions with the walls now work as intended

                                                                                                                                                   

UPDATE 2 (Game Version 0.1)

Now you can submit your opinions, ideas, bug reports and vote on existing! Want a feature, annoyed by a bug? You have a killer new idea?

I really want to hear it!

Go to

                        http://www.anastepic.renianstudio.com/feedback/

and let your voice be heard!

Also you can check my new website if you want to contact me or know more about me and what I do. It's still really new and doesn't have much on it but I'm working to add more content every day!

                                http://www.anastepic.renianstudio.com/

 

About the game physics:

I've set up four invisible box colliders to the edges of the screen that prevent the ball from going off screen. The one in the bottom responds to collisions with the ball by causing the player to lose a life.

The leaf also has an invisible box collider so it could collide with the ball. Movement of the leaf is controlled by x position of the mouse on screen. (I wrote a custom script which I attached to the leaf to make it respond this way)

The ball has a sphere collider with a bouncy physics material and rigidbody with a really low mass.

The background image is just a plane with that image set as a texture.

Flowers are just planes as well, with flower textures on them. They also have a script attached that destroys them upon collision with the ball. Nothing too fancy in this version.

Comments

Please sign in or sign up to comment.