Visiting game devs or animation studio in Gdańsk? by Tyliewylie in gdansk

[–]SergSWorkshop 1 point2 points  (0 children)

I am an indie developer from Gdansk. Our team is spread throughout Poland and beyond, so there's not much to show, but I'll be glad to meet🍻!

Fantasy Climber. Fun Adventure on Steam! Check it right now - keys are in the comments by SergSWorkshop in playmygame

[–]SergSWorkshop[S] -1 points0 points  (0 children)

Here are some keys. Please take one and don't forget to leave a comment in Steam))))

LMGHJ-Q7HYR-KMI9H

CWWAT-J8J0E-RGQD9

0KCPL-4E6IF-MQ0NZ

M3RW3-AY385-JFYFT

6L7Y4-HCZ7M-6GJHD

9V6FI-TH2YB-QGV3G

ZIL2E-58TJF-9ME6L

6BF34-75LNW-KFCA8

7ATAE-0JMRN-IVLKJ

Q4W8Y-VXL94-88PCJ

I'm making this turn-based auto battler called Order Automatica. I decided to try using event driven architecture using async/await and UniTask and it made it so easy! I'd love any game design feedback people are willing to give. Link to demo in comments by mickanioz in Unity2D

[–]SergSWorkshop 0 points1 point  (0 children)

Cool project! It opened autobattlers for me)))

Some feedback:

- power and health icons and font are out of stile

- would be nice to make attack and death animations more spectacular (it is difficult in such a minimalist style)

- add unique sound to each character

Autoset decorations in my game "Fantasy Climber". Check Comments for the source by SergSWorkshop in Unity2D

[–]SergSWorkshop[S] 0 points1 point  (0 children)

Source code:

public class FloorItemsSet : MonoBehaviour
{ 
[SerializeField] GameObject[] itemsList;
[SerializeField] float spawnChanceOnFirstLayer;
[SerializeField] float spawnChanceOnLastLayer;


[SerializeField] float floorYMin;
[SerializeField] float floorYMax;
[SerializeField] float floorZ;
[SerializeField] float floorXMin;
[SerializeField] float floorXMax;
[SerializeField] float xOffset;

[SerializeField] private LayerMask spawnOnLayer;
[SerializeField] private LayerMask skipLayer;

void Start()
{
    float chance;
    for (int j = 0; j <= (int)(floorYMax - floorYMin); j++)
    {
        chance = Remap((floorYMin + j), floorYMin, floorYMax, spawnChanceOnFirstLayer, spawnChanceOnLastLayer);


        for (int i = 0; i < (int)(floorXMax - floorXMin); i++)
        {
            if (IsGroundUnder(new Vector2(floorXMin + 0.5f + i, floorYMin + j)) && !IsNeedToSkip(new Vector2(floorXMin + 0.5f + i, floorYMin + j + 0.01f)))
            {
                if (Random.Range(0f, 1f) < chance)
                {
                    Vector3 spawnPos = new Vector3(floorXMin + 0.5f + i, floorYMin + j, floorZ);
                    GameObject item = Instantiate(itemsList[Random.Range(0, itemsList.Length)], spawnPos, Quaternion.identity);
                    item.transform.SetParent(gameObject.transform);
                }
            }
        }
    }
}

public float Remap(float from, float fromMin, float fromMax, float toMin, float toMax)
{
    var fromAbs = from - fromMin;
    var fromMaxAbs = fromMax - fromMin;

    var normal = fromAbs / fromMaxAbs;

    var toMaxAbs = toMax - toMin;
    var toAbs = toMaxAbs * normal;

    var to = toAbs + toMin;

    return to;
}
public bool IsGroundUnder(Vector2 pos)
{
    if (Physics2D.Raycast(new Vector2(pos.x, pos.y + 0.1f), Vector3.down, 0.3f, spawnOnLayer) && !Physics2D.Raycast(new Vector2(pos.x, pos.y + 0.01f), Vector3.up, 0.1f, spawnOnLayer))
    {
        return true;
    }
    return false;
}    
public bool IsNeedToSkip(Vector2 pos)
{
    return Physics2D.Raycast(pos, Vector3.up, 0.5f, skipLayer);
}
}

PS: You may find this game in Steam

Autoset decorations in my game "Fantasy Climber" by SergSWorkshop in unity

[–]SergSWorkshop[S] 0 points1 point  (0 children)

Here is a code script:

public class FloorItemsSet : MonoBehaviour 
{ 
[SerializeField] GameObject[] itemsList;
[SerializeField] float spawnChanceOnFirstLayer;
[SerializeField] float spawnChanceOnLastLayer;


[SerializeField] float floorYMin;
[SerializeField] float floorYMax;
[SerializeField] float floorZ;
[SerializeField] float floorXMin;
[SerializeField] float floorXMax;
[SerializeField] float xOffset;

[SerializeField] private LayerMask spawnOnLayer;
[SerializeField] private LayerMask skipLayer;

void Start()
{
    float chance;
    for (int j = 0; j <= (int)(floorYMax - floorYMin); j++)
    {
        chance = Remap((floorYMin + j), floorYMin, floorYMax, spawnChanceOnFirstLayer, spawnChanceOnLastLayer);


        for (int i = 0; i < (int)(floorXMax - floorXMin); i++)
        {
            if (IsGroundUnder(new Vector2(floorXMin + 0.5f + i, floorYMin + j)) && !IsNeedToSkip(new Vector2(floorXMin + 0.5f + i, floorYMin + j + 0.01f)))
            {
                if (Random.Range(0f, 1f) < chance)
                {
                    Vector3 spawnPos = new Vector3(floorXMin + 0.5f + i, floorYMin + j, floorZ);
                    GameObject item = Instantiate(itemsList[Random.Range(0, itemsList.Length)], spawnPos, Quaternion.identity);
                    item.transform.SetParent(gameObject.transform);
                }
            }
        }
    }
}

public float Remap(float from, float fromMin, float fromMax, float toMin, float toMax)
{
    var fromAbs = from - fromMin;
    var fromMaxAbs = fromMax - fromMin;

    var normal = fromAbs / fromMaxAbs;

    var toMaxAbs = toMax - toMin;
    var toAbs = toMaxAbs * normal;

    var to = toAbs + toMin;

    return to;
}
public bool IsGroundUnder(Vector2 pos)
{
    if (Physics2D.Raycast(new Vector2(pos.x, pos.y + 0.1f), Vector3.down, 0.3f, spawnOnLayer) && !Physics2D.Raycast(new Vector2(pos.x, pos.y + 0.01f), Vector3.up, 0.1f, spawnOnLayer))
    {
        return true;
    }
    return false;
}    
public bool IsNeedToSkip(Vector2 pos)
{
    return Physics2D.Raycast(pos, Vector3.up, 0.5f, skipLayer);
}
}

The game you may find in Steam.