00:00
00:00
View Profile MonoFlauta
Indie Game Developer + Senior Software Engineer at Etermax

Facundo Balboa @MonoFlauta

27, Male

Indie Game Developer

Escuela Da Vinci

Buenos Aires, Argentina

Joined on 7/30/08

Level:
27
Exp Points:
7,784 / 8,090
Exp Rank:
3,915
Vote Power:
6.86 votes
Rank:
Police Sergeant
Global Rank:
9,066
Blams:
214
Saves:
805
B/P Bonus:
12%
Whistle:
Bronze
Trophies:
14
Medals:
723
Supporter:
5y 30d

MonoFlauta's News

Posted by MonoFlauta - 1 month ago


Twitter Account - DevBlog - Ko-Fi



Hello, everyone!

Some updates about the games I am working on and future plans!

Summer Snow Day

This week we started working on the fourth chapter of Summer Snow Day. Chad sent the first parts of the chapter and I am already having a lot of fun adding them and knowing how the story develops!

iu_396740_2529638.webp

We still need to add a few details for chapter 3 yet but it is almost done. The game is feeling rock solid and I am actually loving it. Also, I can’t stop thinking how awesome the art of KaosuKun looks.

Apart from these new content, we had been also fixing dialogues and small bugs we found playtesting the older chapters. I think that each of these fixes push the game quality further and we hope you will have fun when playing it!

Yemita Update

We also made a new update with fixes for Yemita and some improvements for the camera. Sadly, we still believe the camera has a lot of room for improvement but it will be way to difficult for us given the nature of the gameplay.

Other projects & Game Jam

Meanwhile, I had been working on other projects but some of them I don’t have enough content to show yet or I am working it in a really slow pace in some extra time I find. Don’t worry though, I plan to post updates in the near future specially for Is This Still Tennis.

Also, we had been talking about making another game for a game jam and we decided in October we are going to make a horror game! We already decided the game jam we are going to join but we will give more details when the game jam starts. This will be the first time all of us make a horror game, and I particularly suck at those games, so we will see what we can come up with given this huge challenge!

That will be all for now, thank you for reading!


Tags:

Posted by MonoFlauta - 1 month ago


Twitter Account - DevBlog - Ko-Fi


Hello, everyone!

We teamed up with Hugo Miraballes, Martín Martelletti, Kevin Miles, Lautaro Bravo de la Serna, Santiago Bravo de la Serna and Hernan Colantuono, with extra help from Antonela Valente with the voices, and made Yemita for the Newgrounds Game Jam 2021.

The theme was Egg

iu_388225_2529638.jpg

Day 1/10

The first day we took a lot of time planning what we wanted to do. We went through game genres like puzzle, action, horror, everything… Finally, we decided to make a game of a Yolk on a rampage inspired in GudetamaKatamari Demacy and what would the community of Newgrounds do with these.

From there, Hugo started making our main character while the rest of us started working on the basic mechanics using boxes.

Day 2/10

This was the first full day we worked on and we actually made a lot of progress from this. Lauta and I worked on the basic layout of the map where the player would run as chaotic as possible but trying to give it some paths he could take and we also worked on the character movement, though still needed some extra work, some hazards and the camera.

iu_388224_2529638.jpg

Also, this day Kevin got to work on the main menu and Martín was able to start tweaking the player movement. Meanwhile, Hugo finished the character with the basic animations we needed to start and helped to integrate it to the game.

It was a nice thing to have for the second day because we started to have clearly what was going to need extra polishment and what the game needed to be fun.

Day 3/10

A lot of polishment came this day. From one side, we focused on making the character controller feel a lot better than before. At this point we had 18 parameters that tweeked and gave the final feel to the character movement (and more to came!)

iu_388228_2529638.jpg

Meanwhile, Hugo worked on all the destroyables and the broken glasses that Martín began to place and with Lauta we made the broken pieces pop. All these things gave the game a more alive feeling. Also, this day Lauta started with the Chef (the pink box behind the bar) and we had almost a full behaviour of it working.

Day 4/10

I barely was able to contribute this day. I was vaccinated the day before and I felt terrible with fevers and everything. Anyway, the rest of the team was able to make some progress, most in the level.

iu_388226_2529638.jpg

Also, Kevin started working on the particles that we were going to add and we helped to find some references for Hugo to model.

Day 5/10

By this day we made a huge list with all the things that left on the game. We playtest it and tried it to find out what the game was needing to be more fun. We agreed that it still needed to have a more fluid movement and it needed to be faster so that would be something to tackle in the next days. Also, a few cool ideas to make the gameplay more meaningful were written down and we planned to check them out to see if they would be a nice fit.

Meanwhile, we got some progress with the chef and also had a bunch of new assets and textures. As you can see in the image below, the stools, the texture of the floor and benches were some of the things we added.

iu_388227_2529638.webp

For last, we had a lot of fun leaving random messages at would be the menu. Hopefully they aren’t too misspelled or with gramatical errors but I can’t promise too much.

Day 6/10

At the sixth day Martín had the idea of big light pannels where the player would bounce around and also worked as the extra level of height we were planning to have in order to give more depth to the game and space to explore. I think it was a nice addition that added diversity to the map.

iu_388229_2529638.webp

Also, we made a big change in the gameplay and now the player doesn’t have lives, instead, it has a timer so it can move a lot more freely without worrying about all the broken stuff. With this, Lauta also worked on making the end game sequence so he took care of making all the gameplay flow this day.

Meanwhile, Kevin worked on textures for the bottles adding labels. He searched for interesting texts he could add to the labels and I think they look great and original

For last, I worked on making the sushi convoy belt that now drags not only the character but everything it goes over it and made a system that we would use later for the medals inside the game.

Day 7/10

On this day I worked in fixes with everything related to the physics. Adjusted colliders, adjusted forces, performance optimizations and fixed bugs were the character would jump weird after colliding with what was going to be the chef.

iu_388230_2529638.webp

Talking about the chef, Lauta made a really fun change for it. At first, we had it throw knives to the player but, since we are not going to have a lives, he decided to change it for bottles that break on impact adding more chaos to the game. The bottles can disturb the player but what it is really fun is the chaotic feel it now gives. Also, apart from the chef, he added food attached to balloons to fill the top level with the lamps. One of our focus was the need to add more variety to the level and we thought this was the right direction.

Lastly, Hugo worked in a ton of art assets. He had a huge list of 3D things to do and he was focusing purely and exclusive on it. Though it is a lot left, he already made a bunch of progress and the map started to feel a lot better to the eye than those placeholder cubes.

Day 8/10

By this day we were ready to start with the medals so we brainstormed a bunch of them, wrote them down in a google sheet and then Kevin made the art for most of them while I coded most of them.

iu_388231_2529638.webp

Apart from the medals, Hugo did all the model, texture, rig and animations of the chef character and with some help of Lauta they had it working that same day. It was nice to finally have the chef instead of the pink box because it added a lot of life to the scene that was missing.

By this day, we also noticed we weren’t following too much the theme but we were ok with this because we understood that the game design decisions we took were aiming to make the game a more fun experience.

Day 9/10

At the end of this day we had almost everything working and the game almost ready to deliver. We finished integrating most of the medals, only a few icons left from them. We also added a bunch of particles when the stuff breaks, get hits and moves. And Hugo added a bunch of new art assets that gave a lot of life to the game such as the ramen inside the bowls

iu_388232_2529638.webp

Also, Martín and Lauta worked in a new area that is behind the sushi belt. With that area, and the medals we aimed to invite the player to do some exploration and replay the game more than once.

For last, Lauta got to add a lot of sound effects. Although we still needed to add the music and adjust the sound effects after that, it was already feeling really good!

Day 10/10

Last day of the game jam we worked on integrating the last medals, some screens, the music and wrapping up the Newgrounds API.

Also, from the art side, last details from the screens were polished and a lot of decoration like the boxes were added to finish giving life to the japanese restaurant. It was a nice thing to have it all wrapped up and being able to play it as a solid game.

3 things that could have been better

  • The camera didn’t work as planned. We knew there were some issues with the camera but we never got the time to actually have it as we wanted. Maybe we should have dedicated extra time to it but it was still a very difficult task because we got used to it really soon.
  • Apparently we can’t stay in the theme of the game jam. We always start with an idea we think will fit the theme but we the time we start to make changes and we end up with a game that doesn’t hit the theme at all.
  • Having one person to make all the 3D art was a bit insane. Hugo had to work way too much and with an intense rhythm in order to get everything done. Even more, at times it was difficult for Lauta and me to find stuff to code because many times we were blocked waiting for art.

3 things that did work out

  • Making everything breakable was a really fun thing. Somebody even said it reminded him to Goat Simulator, and for me that is a total win. Once again, abusing the use of physics in Unity I think that really paid off.
  • Hugo has been able to make a bunch of art thanks to vertex paint. Not gonna lie, I am not sure how he did it but if you have an artist and you are aiming for a 3D game for a game jam, it can save you a lot of time so you probably should look it up!
  • The huge amount of medals integrated with the Newgrounds API have an extra purpose to the game and I really liked that. It even gave a reason to explore and not only make a lot of havoc to get a highscore.

8th of 104 games

Luckly for us, the judges decided the game finished in the podium, exactly 8th, from the 104 submissions that were uploaded.

The whole team clearly put their all into the pure charm of Yemita, with very clean 3d visuals and catchy music. The gameplay too, while a bit difficult to get the hang of, is simple and fun, and I love all the different nooks and crannies to eggsplore in the level.
Eggburn from Newgrounds

It was the first time we finished on the podium based on judges votes so it was a nice thing to have. Also, at least from me, it was an extra because it was on Newgrounds and you know I am kinda a fan of Newgrounds

Where can I play it?

If you didn’t play it yet, I recommend you to play it at Newgrounds while being logged in so you unlock medals and upload your highscore to the table!

That would be all for now! Thank you for reading!


Tags:

6

Posted by MonoFlauta - August 8th, 2021


Hello, everyone!

Going to make some updates regarding Is This Still Tennis, Summer Snow Day and other news.

After working on Yemita, I went back to my long time projects. I will probably focus mainly on Is This Still Tennis and another project I didn’t announce yet, for the rest of the year. Although, if an opportunity for another game jam attracts me maybe I take another break and participate on it ^^

Is This Still Tennis

For Is This Still Tennis I had been fixing a few bugs that I left and I finished integrating an enemy Roberto made: The Squirrell

iu_381530_2529638.webp

Roberto already made a bunch of enemies with their assets but, except for the squirrell, they all need their animations which he will be probably doing soon!

The game feels now a lot more alive by having an actual enemy infront of you that throw the projectiles, recieves the impacts and actually shows up and dies when you defeat him. Although there are still a few adjustment like the enemy throwing the correct projectile in the animation, I am pretty happy with this new addition.

Summer Snow Day

Regarding Summer Snow Day, we had been with Lauta making adjustments from a big list Chad made. We have almost all of it done and the games feels really solid, in my opinion, with a lot of details that aren’t really common in visual novels. I hope these kind of details make it pop out and make it feel unique (apart from the plot which I am really enjoying).

iu_381531_2529638.webp

One of the latest details we added is the breath effect, which you can see animated in a gif at my Twitter account.

Meanwhile, Chad had been working on the fourth chapter and he will be probably sending it to us soon so we should be able to start adding it to the game really soon hopefully!

Other news

Apart from Is This Still Tennis and Summer Snow Day, I had been working now for a long time on another project which I will try to start showing updates as soon as it doesn’t have so much placeholder art. Anyway, I can start telling you that it will include a dungeon and dices with some nice unique mechanics as far as I know.

Also, I returned to keep updated my Facebook page and my Ko-Fi page so consider following there and if you aren’t doing it yet, consider following me on Twitter too!

For last, I renewed my Newgrounds Supporter membership. I will always be gratefull to Newgrounds for helping me find my vocation.

That will be everything for now! Thank you for reading!


Tags:

Posted by MonoFlauta - July 27th, 2021


Full Post - Twitter Account - DevBlog


Hello, everyone!

This time I will show you a list of useful Unity extensions and the cases where you can use them. I had been looking around to expand my list of useful extensions and some of them were pretty interesting plus I already had a few I normally use.


iu_370264_2529638.webp


What are extension methods and how do you create extension methods in C#

The extension methods in C# are methods that let you extend the functionality of any class. Basically, you can add an extra public method to the class. Beware that you will not be able to access it’s private values while doing this.

In order to create them, you just need a static class, for example ClassToExtendExtensions.cs and add static methods like this:

public static void ExtensionMethodName(this ClassToExtend o)
{
    //Do stuff
}

Apart from the static, take in mind that we are adding a this before the ClassToExtend parameter. You can also ask for more parameters but by having this, you can just do:

myClassToExtendInstance.ExtensionMethodName();

And so, you extended the class without having to actually modify the class. Pretty useful for classes you can’t modify.

Now lets see some useful method extensions!

Vector extensions

You will be probably using a lot of Vector3 or Vector2 in your games. So here are a few extension methods for that:

public static Vector2 SetX(this Vector2 vector, float x)
{
    return new Vector2(x, vector.y);
}

This method sets the value. Since you can’t set the x or y value, you can have this one. I recommend adding the y one and you can do the same for the Vector3.

public static Vector2 AddX(this Vector2 vector, float x)
{
    return new Vector2(vector.x + x, vector.y);
}

As the upper one sets, this one lets you add or substract to a value. The same you can do with y value and with Vector3.

public static Vector2 GetClosestVector2From(this Vector2 vector, Vector2[] otherVectors)
{
    if (otherVectors.Length == 0) throw new Exception("The list of other vectors is empty");
    var minDistance = Vector2.Distance(vector, otherVectors[0]);
    var minVector = otherVectors[0];
    for (var i = otherVectors.Length - 1; i > 0; i--)
    {
        var newDistance = Vector2.Distance(vector, otherVectors[i]);
        if (newDistance < minDistance)
        {
            minDistance = newDistance;
            minVector = otherVectors[i];
        }
    }
    return minVector;
}

Now this one is a bit more complex but you can make many variants from it. This method will bring you the closest vector from a list. You can use it to give a list of positions and know the closest one of them. From this one, you can also make the Vector3 variants, the one that brings you the closest distance (float value) and the farthest version.

GameObject extensions

Every thing you will Instantiate will be a GameObject so it would be wise to have some extensions for it! So here we go:

public static T GetOrAddComponent<T>(this GameObject gameObject) where T : MonoBehaviour
{
    var component = gameObject.GetComponent<T>();
    if (component == null) gameObject.AddComponent<T>();
    return component;
}

With this method you can automatically add a component in case the GameObject doesn’t have it yet. Beware that the component will have nothing assigned if its created, you should be very careful with what components you use this method.

public static bool HasComponent<T>(this GameObject gameObject) where T : MonoBehaviour
{
    return gameObject.GetComponent<T>() != null;
}

And this method will tell you if the GameObject has or not a component. Useful if you are adding constantly components because gameplay requirements.

List extensions

Another thing you will use a lot, or at least we did when making Paw Pals for example, will be List extensions.

iu_370263_2529638.webp

Here is the one I find the most useful one:

public static T GetRandomItem<T>(this IList<T> list)
{
    return list[Random.Range(0, list.Count)];
}

This one will give you a random item from the list. I, personally, use this one a lot https://s.w.org/images/core/emoji/13.1.0/svg/1f642.svg

public static void Shuffle<T>(this IList<T> list)
{
    for (var i = list.Count - 1; i > 1; i--)
    {
        var j = Random.Range(0, i + 1);
        var value = list[j];
        list[j] = list[i];
        list[i] = value;
    }
}

And this one is another one I often use that shuffles a list. You can use this one for example for a random turn based game.

Transform extensions

This two methods I am going to show you I found them recently and I though they were really clever ones.

public static void DestroyChildren(this Transform transform)
{
    for (var i = transform.childCount - 1; i >= 0; i--)
    {
        Object.Destroy(transform.GetChild(i).gameObject);
    }
}

With this one, you can clean for example GameObjects you were using as containers.

public static void ResetTransformation(this Transform transform)
{
    transform.position = Vector3.zero;
    transform.localRotation = Quaternion.identity;
    transform.localScale = Vector3.one;
}

And with this one you can reset the transformation. Setting it as its neutral pose.

Rigidybody extensions

And for last! Two more methods for rigidbodies I had found useful in the past.

public static void ChangeDirection(this Rigidbody rb, Vector3 direction)
{
    rb.velocity = direction.normalized * rb.velocity.magnitude;
}

With this one you can change the current direction of a rigidbody while keeping it’s velocity. Also, you can make the Rigidbody2D alternative.

public static void NormalizeVelocity(this Rigidbody rb, float magnitude = 1)
{
    rb.velocity = rb.velocity.normalized * magnitude;
}

And with this one you can normalize the velocity to a target speed while keeping the direction.


You can finish reading this post at my DevBlog (for free of course!).


Thank you for reading and feel free to ask me if you have any question!


Tags:

Posted by MonoFlauta - July 25th, 2021


Hello, everyone!

Just wanted to make a quick post about our new game Yemita. This game was made for the Newgrounds Game Jam July 2021.

iu_367905_2529638.webp

Please consider trying it out :) ! and here is the full description of the game:

Yemita is a game where you control a yolk on the run and destroy everything on your path in a japanese restaurant. The chef was trying to add you to a ramen bowl but you decided you are not ready to be eaten. Because of that, your goal will be to create as much destruction as possible in your short life.

This game was made for the July Newgrounds Game Jam 2021. The theme for the jam was “Egg”.


FEATURES

  • Lots of stuff to break
  • A running yolk with an over detailed butt
  • Cozy japanese restaurant
  • Crazy octopus chef that may get angry if you hit him
  • Bamboo plants
  • Did we mention a lot of stuff that can be broken?


CREDITS

Game Design: Martín Martelletti

Artists: Hugo Miraballes & Kevin Miles

Programming: Lautaro Bravo de la Serna & Facundo Balboa

Music & SFX: Santiago Bravo de la Serna, Hernan Colantuono & Antonela Valente


4

Posted by MonoFlauta - July 4th, 2021


Full Post - Twitter Account - DevBlog


Hello, everyone!

I am going to explain the Object Pool I usually use. You can find the full version on my Framework Goat if you are interested.

iu_348517_2529638.webp

Witchcraft used Object Pool for the spells


What is an Object Pool

Object Pool is a programming pattern used to reduce performance issues related to object creation by expending extra ram by doing so.

The main concept or idea is that you don’t create new instances of object but instead recycle the ones you have after finish using them.

The full loop of an Object Pool would be something like this:

  1. You start with x amount of the object
  2. Each time you need an object, you ask for the Object Pool to give you one
  3. Once you finish using the object, instead of destroying it you give it back to the Object Pool

Of course there are some extra considerations to take care of like these ones:

What happens if the Object Pool runs out of objects? It creates new ones? Returns null?

  • I personally recommend creating new ones. They will be added to the stock in case you reach a new amount and you will not need to check for null references.

With how many objects should I start?

  • It will depend on what the Object Pool pools. You can make tests to see the max amount and use that as base so you don’t have to create them on runtime.


Why use generics?

You can make an Object Pool without generics but using generics will give you a huge advantage. Basically, generics allows you to define placeholders for the types you are going to use in some parameters.

So, instead of doing something like:

public class ObjectPoolForBullets {
    //Stuff
}

and

public class ObjectPoolForEnemies {
    //Stuff
}

and…

public class ObjectPoolForEffects {
    //Stuff
}

You can solve all of them by doing:

public class ObjectPool<T> {
    //Stuff
}

And when you define the field type you will just need to say what type between the <> like this for example:

private ObjectPool<Bullet> _bulletPool = new ObjectPool<Bullet>(); //This will have parameters inside

Even more, you will be able to have this class pre-saved and use it in any game jam you want to participate!



Why use Factory Method?

When using generics, you won’t know what type of object you are going to use. Yet, you will need to know how to create it if you want to have more during runtime.

The goal of factory method is that you have a method you can call and it will return that object to you. You will only need to know the method instead of how to create it. So you can have something like this as parameter:

public ObjectPool(Func<T> factoryMethod...) //It will have more parameters

Notice how that T will be the same that the class defined. Basically, as it is a Func<T>, you will be able to call that method without parameters and it will return you a T created. So, thinking only in making this Object Pool, you have all what you need. You don’t have to worry anymore on how to create T, you just know what you need to call in order to create it and get it.

iu_348516_2529638.webp

We used the exact Object Pool you can see in Framework Goat for Blight (a game jam game) for all the bullets and enemies



How to create it

I am going to show you step by step how to create this Object Pool. Notice you can make changes if you want or you have different requeriments.

So, first of all, as I showed before, we will need a Object Pool class with the generics <T>.

public class ObjectPool<T>
{
}

From there, let’s create the constructor and see each value we will need:

private readonly List<T> _currentStock;
private readonly Func<T> _factoryMethod;
private readonly bool _isDynamic;
private readonly Action<T> _turnOnCallback;
private readonly Action<T> _turnOffCallback;


public ObjectPool(Func<T> factoryMethod, Action<T> turnOnCallback, Action<T> turnOffCallback, int initialStock = 0, bool isDynamic = true)
{
    _factoryMethod = factoryMethod;
    _isDynamic = isDynamic;

    _turnOffCallback = turnOffCallback;
    _turnOnCallback = turnOnCallback;

    _currentStock = new List<T>();

    for (var i = 0; i < initialStock; i++)
    {
        var o = _factoryMethod();
        _turnOffCallback(o);
        _currentStock.Add(o);
    }
}

So lot of stuff going on here. First, lets check what every parameter will be used for:

  • factoryMethod – As mentioned before, this one will be used in order to us be able to create new objects when needed without having to know how to create it
  • turnOnCallback – We are going to use this method to activate our object. So, each time someone request an object to our Object Pool we will make sure it is ready to use and activated. We are using Action<T> because we don’t know how this object will be activated but we can send it by parameter.
  • turnOffCallback – We are going to use this method to deactivate our object. So, each time someone returns an object to our Object Pool because they doesn’t need it anymore, we make sure it is deactivate. As in the last one, we will use the Action<T> for the same reasons.
  • initialStock – This one is the initial stock we are going to use for the Object Pool. I had given it a 0 default value in case the user of the Object Pool doesn’t want to have an initial stock.
  • isDynamic – Remember the question of what we should do if we run out of objects? Well, the Object Pool is called dynamic if it creates in runtime when running out of objects. If not, it will return the default value of the type.

Those are all the parameters our Object Pool will need to work. You can make it simpler than this but I prefer to have all this functionality in order to don’t have future issues like forgetting to activate or deactivate the objects.

Now let’s check the body of the constructor. The first lines are just saving those values and initializing the list of objects. Then, we have a for that creates each object, it deactivates it just in case and then adds it to the current stock of the Object Pool.

That is all for the constructor. We asked for everything we need, we saved all the stuff we are going to need later and we created the initial stock.

We are going to need to extra methods now. The first one we are going to do is a method that lets me get an object from the Object Pool.

The method will be like this:

public T GetObject()
{
    var result = default(T);
    if (_currentStock.Count > 0)
    {
        result = _currentStock[0];
        _currentStock.RemoveAt(0);
    }
    else if (_isDynamic)
        result = _factoryMethod();
    _turnOnCallback(result);
    return result;
}

So, let’s see what we are doing here. First, let’s check the method firm. The Get Object will receive nothing, because we just want to get an object and it will return a T type that is the type of the object that saves the Object Pool.

Now we can check the body. First, we assign our result value as a default(T). Why default(T)? Because we don’t know if the object we are going to use has a null state.

Then, in the if we are going to check if we have stock. In case we do, we take the first one and remove it from our stock. If we don’t, we check if the pool is dynamic and we create a new one using the factory method.

For last, we now have the object we are going to use so we just need to turn it on using the turn on callback we got from the constructor and return it.

Now we have the constructor to set all what we need and a method to get objects from the Object Pool. The last method we are going to need is one that lets us return the object to the Object Pool. For this, we are just going to need the following method:

public void ReturnObject(T o)
{
    _turnOffCallback(o);
    _currentStock.Add(o);
}

As you can see, it is a really simple method. We just need to pass it a T object and it will deactivate and add it to the stock. That’s all it needs to do.

Final result

The final result of what we did is the following:

public class ObjectPool<T>
{
    private readonly List<T> _currentStock;
    private readonly Func<T> _factoryMethod;
    private readonly bool _isDynamic;
    private readonly Action<T> _turnOnCallback;
    private readonly Action<T> _turnOffCallback;

    public ObjectPool(Func<T> factoryMethod, Action<T> turnOnCallback, Action<T> turnOffCallback, int initialStock = 0, bool isDynamic = true)
    {
        _factoryMethod = factoryMethod;
        _isDynamic = isDynamic;

        _turnOffCallback = turnOffCallback;
        _turnOnCallback = turnOnCallback;

        _currentStock = new List<T>();

        for (var i = 0; i < initialStock; i++)
        {
            var o = _factoryMethod();
            _turnOffCallback(o);
            _currentStock.Add(o);
        }
    }

    public ObjectPool(Func<T> factoryMethod, Action<T> turnOnCallback, Action<T> turnOffCallback, List<T> initialStock, bool isDynamic = true)
    {
        _factoryMethod = factoryMethod;
        _isDynamic = isDynamic;

        _turnOffCallback = turnOffCallback;
        _turnOnCallback = turnOnCallback;

        _currentStock = initialStock;
    }

    public T GetObject()
    {
        var result = default(T);
        if (_currentStock.Count > 0)
        {
            result = _currentStock[0];
            _currentStock.RemoveAt(0);
        }
        else if (_isDynamic)
            result = _factoryMethod();
        _turnOnCallback(result);
        return result;
    }

    public void ReturnObject(T o)
    {
        _turnOffCallback(o);
        _currentStock.Add(o);
    }
}

You should be able to take this C# script and take it to any project. Even more, you can make this structure in other languages. I did something similar in AS3 for my Framework Mono.

iu_348515_2529638.webp

The spheres in Skeleball also used this Object Pool



You can finish reading this post at my DevBlog (for free of course!). Though with all this content you can already create it and use it :)


Thank you for reading and feel free to ask me if you have any question!


Tags:

Posted by MonoFlauta - June 13th, 2021


Hello, everyone!

We just published Paw Pals for the GMTK Game Jam 2021. We made this game in less than 48hs and we are really happy with the results. Hope you can try it and have fun with it!

iu_330040_2529638.webp

Paw Pals is a game where you manage a bunch of kitties trapped on the top of a tree. Your goal is to investigate enough of the big book of “How to get down of a tree for dummy kitties” while making sure your kitties have enough food.

But here is the catch: Your kitties have personalities and some of them may not be too happy about working with others therefore making them feel more and more stressed. High levels of stress will make the kitties work a lot less so take care of the kitties!

iu_330041_2529638.webp

Features:

  • Lots of cats to discover and make friends with
  • 4 Unique areas
  • The big bucket for fishing
  • Balloon Bay for sending kitty explorers
  • Scratching Posts to lower cats’ stress
  • Big book of knowledge to learn how to get down of trees if you are a cat
  • Multiple cat traits making the clowder diverse
  • Fun for the whole family

Hope you have fun with it and stay tuned for more updates regarding my other projects!


Tags:

2

Posted by MonoFlauta - July 12th, 2020


Hello, everyone!

Last time I wrote here we were around the days 45 day of quarantine in my country. Now we are around 110? Not sure really... Well, it can't be helped ¯\_(ツ)_/¯.

Anyway, in other news, have updates on all the projects I am working on!

Summer Snow Day

Chad already started with the second chapter. Well, actually, he already sent all the scripts and I just have to add them. I didn't start with it yet because we have a last small bug to fix from chapter 1. Once it is finished, we are going to officially start with the second chapter which should take a lot less with all the working base chapter 1 will leave to us.

iu_142489_2529638.jpg

These last weeks had been a most of tweak and get everything in order before continuing from my side. Also, I know that Chad had been working on the main menu so we have that too working from our side. We had been thinking about how the save files are going to work and that. Hopefully, all this pre-production will result in a better game.

Is This Still Tennis?

This is the project placeholder name we gave with FuNaNdMoRe to a project we are working on during our free time. Yes, you read well, with FuNaNdMoRe! The last game we did together was Billy's Barricade in 2012 for the Newgrounds Game Jam 8, if we don't count Divine Carnival in the Bayou and Order of the Narwhal were FuNaNdMoRe came to add his awesome music. If you are insterested in games we made together, remember to visit the page of Fun+Mono in my blog.

Both of us had been working and learning a lot about videogame development through these many years. Even though, we got to met each other almost two years ago. Well, a month ago, more or less, we decided to start working on a small web game as a nostalgic thing for Newgrounds.

iu_142490_2529638.png

We are still trying out the mechanics and we don't have 100% defined what the game is going to be but for now, we have an otter protecting its baby otters from evil enemies that throw stones to them. If you checked out my Twitter account you probably saw already a gif of it but if not, go and check it!

Roque's Life

The truth is that we still don't have a final name for this but we are using this one as placeholder. This is the game we are making based on Sense of Unity, a game we made for the Stay Safe! Jam.

So far, we have the mechanical parts of the menu, the editor and the some of the special tiles of the gameplay. We had been working slow on this since most of the team members have other jobs but we are ready to start adding art to the game. Hopefully, we will be updating a lot more soon.

End

Hope you are doing well and taking care of yourself during these difficult times. I don't have any more news but please consider following me on Twitter for the latest news. Good luck and thanks for reading!


Tags:

1

Posted by MonoFlauta - May 10th, 2020


Follow me on Twitter!



Hello, everyone!

Long time I don’t write an update here so I decided to make some time for this. Hope you are taking care of yourself and everyone during these strange times.

New features for Summer Snow Day

With Chad we had been adding new features to Summer Snow Day. There was a small period with no updates but now things are running smoothly.

Some of the new updates include the addition of video clips between moments that give them a huge new feeling to the game. Also, I think they will be of a high quality since Chad is an expert at editing videos and he will make some great results with the tools he has.

iu_119952_2529638.jpg

I think the only downside Summer Snow Day project has now is the legacy code I made. I had learned so much since we started and now I am carrying with some crappy code. Anyway, I am making some refactors so this won’t affect on the long run.

Other projects

Regarding other projects. I am working in two other ones.

One of them is based on Sense of Unity, a game we made for the Stay Safe Jam. If you didn’t try it out yet, please consider playing it.

What we are planning to do is to expand on the mechanic we had and even add a level editor in game.

iu_119953_2529638.jpg

(Character made by Hugo Miraballes)

One of the things that gives me special interest in this project is the fact that we are coding it using Test-Driven Design. Probably the first thing I learned at my new job is TDD and I was looking forward to use it in my personal projects. Since all the programmers for the project work at the same place, we all know TDD and therefore we decided to give it a shot. Also, we believe it will help the game to develop faster and to be less prone to bugs.

iu_119954_2529638.png

We are still working on it of course. But one highlight I can give, as you had seen in the character picture, we are making a rework of the theme and it will be a lot more friendly and cute one than the plague doctor. You will be playing as this old owl helping people while you travel through your long journey. But that is what I can show so far. Hopefully I will have more to show in a near future.

Meanwhile, on the other hand, I had been talking with a long time friend and we are playing to make a game again together. We hadn’t decided on what yet but I would love to work with him again and I hope this happens.

Other than that, I am going to start having a different approach for the games I am working on. Till I don’t see that the project is advanced enough to say “well, looks like this is really happening” I will not add them on Working on or even give them names if that depends only on me.

iu_119955_2529638.png

This is mostly because I had seen a lot of projects started and died because of lack of work on them (from all the members including me). But don’t worry, I will still keep adding updates and showing on stuff on my twitter account.

More

This is the day number 45 of official quarantine in my country (day 46 for me because at my work they decided to start just one day before the government announced). Though it has been a very stressful moment, I have to admit that things managed well in my country and everyone I know is safe as far as we know. I hope you are taking care of yourself too.

Also, this week I received an email from Steam that my newest payment for YBit earnings was ready. Sadly, I also received an email from the bank saying that I won’t get my money till I show some documents that I can’t recall. I will call the bank on Monday and see if I can do something about it but this kind of things always make me think about how difficult is to freelance outside of the country and how much needed is the payment to PayPal option from Steam.

For last, I am having a great time at my work. I learned a ton of new things and I am excited to learn more of them. I read a book called The Manager’s Path: A Guide for Tech Leaders Navigating Growth and Change by Camille Fournier and I am reading Conscious Business by Fred Kofman. These both books helped me to learn a lot of negative things that happened at my last work and I can’t believe how positive is my new workplace when taking care of its employees. So just wanted to tell you that I am really happy right now and feel blessed for my opportunities.

Thank you for reading and stay safe!


Tags:

3

Posted by MonoFlauta - April 1st, 2020


iu_106227_2529638.jpg

Hello everyone!

I know it passed less than seven days since my last post about a new game but… Sense of Unity is a new game and it’s out now!

The game was made in Unity for the Stay Safe! Jam and it was made by a total of 8 persons including artists, programmers and game designers.

iu_106228_2529638.jpg

I had never made a game jam game with that big amount of people and it was incredible fun and worth it. Hopefully we will get to make another game together like this in the future.

So please go and try it out!


Tags:

3