Geckoo1337

Ludum Dare 54

Thanks Спасибо Merci

Hello everyone. I hope that all is fine for you and your family. Just a few words to thank you for your participation during the latest LudumDare events. We were here as usual, sharing good projects and some really relevant games. 2023 year is ending and the next seems a little bit too complicated because of wars and different problems on earth. I would like to see mankind reflecting more or less what I know about our community - sharing passion and respect. Thank you for your help and kind words. Without you, life would not have the same taste... If something can be changed, it will be by the music (said Bob Marley). I guess that games and creativity can do the same. Don't give up. I wish you the best. God bless you. See you later, my dear friends ++

Привет вам. Я надеюсь, что у вас и вашей семьи всё в порядке. Несколько слов, чтобы поблагодарить вас за участие в последних мероприятиях LudumDare. Как обычно, мы были вместе, чтобы делиться хорошими проектами и интересными играми. 2023 год заканчивается, и следующий кажется уже страшным из-за войн и разных проблем на Земле. Мне бы хотелось, чтобы человечество (более или менее) отражало то, что я знаю о нашем сообществе, делилось страстью и уважением. Спасибо вам за поддержку. Без вас жизнь не имела бы того вкуса... Если что-то можно изменить, то это будет музыкой (сказал Боб Марли). Думаю, что игры и творчество/искусство могут сделать то же самое. Не сдавайтесь. Желаю вам всего наилучшего. Пусть Бог вас благословит. Увидимся в недалеком будущем - мои дорогие друзья ++

Salut à tous. J'espère que tout va bien pour vous et vos proches. Juste quelques mots pour remercier chacun pour son implication durant les derniers LudumDare. Comme d'habitude, nous étions là, partageant de bons projets et des jeux parfois incroyables. L'année 2023 se termine et la suivante ne prend pas une orientation idéale du fait des guerres et des différents problèmes sur Terre. J'apprécierais de voir l'humanité refléter ce que je sais de notre communauté, laquelle brille de partage et de respect. Merci pour votre soutien. Sans vous, la vie n'aurait pas la même saveur... Si quelque chose peut être changé, ce sera par la musique (dixit Bob Marley). Je suppose que les jeux, les arts et la créativité peuvent faire de même. Ne renoncez pas. Je vous souhaite le meilleur. Que Dieu vous bénisse. On se voit bientôt, mes très chers amis ++

one day - one song

99 days before the next LD. I start again the same stupid game :)

https://www.youtube.com/watch?v=sc5iTNVEOAg

Just a few words to explain to everyone how it works - the only rule. Each day who wants to do that can post a song with a few words just to say something about himself or the song - or something else. If someone has posted for the day a song, wait the next day to share your clip. Don't flood the thread - and think about others. One day - one song. The main goal is to keep the torch burning until the next LudumDare event. That's all friends ++

What we started a few months ago :)

https://ldjam.com/events/ludum-dare/53/all-odium-needs-is-love/time-wrong

StarDust PostJam

Hello my friends. A few words to say that I continue my PostJam entry for the latest LudumDare. I don't know exactly where I should go, but I made a technical demo with many features. This is not the final gameplay. Instead it's a solid VFX implementation in order to play with colors to get some depth into an invisible environment. I fixed some problems according to the reviews which I received during the 54th LD session. Take a look at my work. If you like it, give a thumbs up and/or leave a comment. Thank you for your support. I wish you the best ++

https://geckoo1337.itch.io/stardust

StarDust01.jpg

Indie Dev

Hello everyone. I would like to expose to you my problem with which I am struggling - and I need some advice. I can say that I am an Indie Dev without any pretension. I made some solid projects in the past, trying to do my best, sharing my passion with others. I created a game which is available on itch.io and Steam for a single buck - Theorem, a little puzzle game. The ratings are positive, but I got only 28 reviews on Steam. The game is good, but I have no community. My latest project for the 54th LudumDare received many good ratings as a Jam entry (mood #4 and graphics #6). Now I would like to reach another level, creating a little studio to become Pro. I am not trying to get rich 'cause I don't need money - instead I want to share art and dreams. However I have no community around my work - and I would like to gather one. I guess that it is necessary if I want some visibility among other projects. So I am aware that I have no understanding about the process needed to do that. I noticed something really interesting a few weeks ago about sharing free keys of my game Theorem - I can generate a lot of traffic during a few days (more or less 4000 visits and 400/500 downloaded games). LudumDare is a big community, but outside of the event there is nothing... Finally this is my question : how to gather a community around a project? Which social media does the work? Should I pay someone to do the work (I can)? Thank you for your help. And as usual I wish you the best ++

https://geckoo1337.itch.io/theorem

https://store.steampowered.com/app/838490/Theorem

https://geckoo1337.itch.io/stardust

https://ldjam.com/events/ludum-dare/54/stardust

Pi day

Today is Pi day ~ 3.14159. I have no clue about what it could be, but I wish you a happy Pi day. Below are some ideas in order to celebrate Pi day. This irrational number is magic. It is infinite, unpredictable and transcendental. It appears everywhere around us. Mathematicians say that Pi is as close to religion as you can get in math. Pi is a perplexing, elegant representation of something more vast and profound. The symbol π was first used by William Jones in 1706 as an abbreviation for the ratio of the circumference to the diameter of any circle, but there is something really spiritual behind this symbol - and I love that. Pi is fun ++

https://www.piday.org/ways-to-celebrate-pi-day

pi.jpg

Ludum Dare 55

Done

Slaughter.jpg

Нажми на кнопку - получишь в результат

И твоя мечта осуществится :smile_cat:

Hello everyone. For a few days, as usual you can get my game Theorem for free. Not the best game which I made, but another puzzle game in your library. Have fun. I wish you the best for the 55th LudumDare. And don't forget - no matter it is, the theme always suck :snowman:

https://geckoo1337.itch.io/theorem

Virtual Church of the Digital Goddess

Virtual Church of the Digital Goddess is a puzzle game which I made as an entry for this 55th LudumDare session. You move some magic stones in order to reach goals. This way you can summon the Digital Goddess - and she blesses you. The gameplay is based on colors, but it's more than it seems - maybe too hard. Try it if you dare. Rate my project, leave a comment - and I will rate yours too. I wish you the best. Thank you for your participation ++

VirtualChurch.jpg

https://ldjam.com/events/ludum-dare/55/virtual-church-of-the-digital-goddess

VCDG dev-log

Virtual Church Of The Digital Goddess is my entry for this 55th LudumDare session. When I discovered the chosen theme (Summoning) I was in an uncomfortable situation. By religious conviction I cannot play with black magical art, evil spirits and all things more or less similar. I have immediately understood that a big amount of entries could play with sorcery - and LD members did. I respect this choice, but I tried to create something different without evil invocation, black sabbath, devil, etc. This is the first time in my indie dev life that I encountered this constraint. So I struggled with a new challenge. Let's go! I decided to create (another) puzzle game - my favorite games' genre, but adding a new way. I asked myself - is there a way to create a game only with a mathematical core, no rigidbody, no collider, etc? So VCDG is an experimentation into solid math processes. Maybe for this reason, the cubes and their movements seem so smooth, perfectly aligned on edges. To do that I use this code :

``` // smooth rotation IEnumerator Tumble(GameObject thisOne, Vector3 direction, Vector3 endPosition, Quaternion endRotation, Vector3 pivot, Vector3 rotAxis, float rotSpeed, bool ret) { float t = 0.0f;

if (loader.GetComponent<Loader>()._move != null && loader != null)
{
    if (Time.timeScale > 1.5f)
        _loader.playSound(_loader._move, this.transform, true, 0.21f, 0.41f, _loader._move.length, false);
    else
        _loader.playSound(_loader._move, this.transform, true, 0.31f, UnityEngine.Random.Range(0.71f, 0.92f), _loader._move.length, false);
}
// rotate player cube
while (t < tumblingDuration)
{
    isTumbling = true; // unreachable
    t += Time.deltaTime;
    // tip to avoid tiny glitch
    if (Mathf.Abs(t - tumblingDuration) < tumblingDuration / 30)
        t += 1.0f; // out of the loop right now

    thisOne.transform.RotateAround(pivot, rotAxis, rotSpeed * Time.deltaTime);
    yield return Timing.WaitForOneFrame;
}
// clean position and rotation
thisOne.transform.position = endPosition;
thisOne.transform.rotation = endRotation;
// store new position so as to check forbidden face
storedPos = endPosition - shift;
// don't store the return movement in back in time mode!!!
if (!ret)
    addNewMov(direction, thisOne);
// check if the last movement is available
checkState(thisOne, direction);
// done
isTumbling = false;

} ```

Also there are a lot of constraints in the game, especially about colors and position/rotation. This part was really complicated - and I struggled hard against some non-understandable bugs. Finally I have this code which seems to me relevant and clever :

``` // check new position and rotation private void checkState(GameObject thisOne, Vector3 direction) { // 1° check if a new step is available if (!loader.GetComponent().giveMeNumber(loader.GetComponent().pattern, listMov.Count)) { computeMove(-direction, thisOne, true, true); // play a sound if (loader.noMoreStep != null && loader != null) loader.playSound(loader.noMoreStep, this.transform, true, 0.4f, 0.95f, _loader.noMoreStep.length, false); // get out of there return; } // 2° check cube face if (listPos.Contains(thisOne.transform.position + new Vector3(1, 0, 0)) || listPos.Contains(thisOne.transform.position - new Vector3(1, 0, 0)) || listPos.Contains(thisOne.transform.position + new Vector3(0, 0, 1)) || listPos.Contains(thisOne.transform.position - new Vector3(0, 0, 1))) { foreach (GameObject g in cc) { // excludes cube player which are not in our radius if (g != thisOne && Vector3.Distance(g.transform.position, thisOne.transform.position) < 1.1f) { var d = (thisOne.transform.position - g.transform.position).normalized; // check if cube touching have the same color on their face var isXA = Mathf.Abs(Vector3.Dot(d, thisOne.transform.right)) > 0.999f; var isYA = Mathf.Abs(Vector3.Dot(d, thisOne.transform.up)) > 0.999f; var isZ_A = Mathf.Abs(Vector3.Dot(d, thisOne.transform.forward)) > 0.999f;

            var isX_B = Mathf.Abs(Vector3.Dot(d, g.transform.right)) > 0.999f;
            var isY_B = Mathf.Abs(Vector3.Dot(d, g.transform.up)) > 0.999f;
            var isZ_B = Mathf.Abs(Vector3.Dot(d, g.transform.forward)) > 0.999f;

            bool sameColor = isX_A == isX_B && isY_A == isY_B && isZ_A == isZ_B;
            // this movement is finally forbidden
            if (!sameColor)
            {
                computeMove(-direction, thisOne, true, true); // back step
                // get out of there
                return;
            }
        }
    }
}
// 3° check colored tiles
if ((Mathf.RoundToInt(thisOne.transform.eulerAngles.x) == 0 && Mathf.RoundToInt(thisOne.transform.eulerAngles.z) == 180) ||
         (Mathf.RoundToInt(thisOne.transform.eulerAngles.x) == 0 && Mathf.RoundToInt(thisOne.transform.eulerAngles.z) == 0))
{   // red tile on ground
    if (greenTilesPos.Contains(storedPos) || blueTilesPos.Contains(storedPos) || greenGoal.Contains(storedPos) || blueGoal.Contains(storedPos))
        computeMove(-direction, thisOne, true, true);
    else if (listBlank.Contains(storedPos))
        blankTileProcess(1, storedPos);
    else if (redGoal.Contains(storedPos))
        levelSolved(thisOne);
    // get out of there
    return;
}
else if ((Mathf.RoundToInt(thisOne.transform.eulerAngles.x) == 0 && Mathf.RoundToInt(thisOne.transform.eulerAngles.z) == 270) ||
         (Mathf.RoundToInt(thisOne.transform.eulerAngles.x) == 0 && Mathf.RoundToInt(thisOne.transform.eulerAngles.z) == 90))
{   // green tile on ground
    if (redTilesPos.Contains(storedPos) || blueTilesPos.Contains(storedPos) || redGoal.Contains(storedPos) || blueGoal.Contains(storedPos))
        computeMove(-direction, thisOne, true, true);
    else if (listBlank.Contains(storedPos))         
        blankTileProcess(2, storedPos);
    else if (greenGoal.Contains(storedPos))
        levelSolved(thisOne);
    // get out of there
    return;
}
else if ((Mathf.RoundToInt(thisOne.transform.eulerAngles.x) == 270 && Mathf.RoundToInt(thisOne.transform.eulerAngles.z) == 0) ||
         (Mathf.RoundToInt(thisOne.transform.eulerAngles.x) == 90 && Mathf.RoundToInt(thisOne.transform.eulerAngles.z) == 0))
{   // blue tile on ground
    if (redTilesPos.Contains(storedPos) || greenTilesPos.Contains(storedPos) || redGoal.Contains(storedPos) || greenGoal.Contains(storedPos))
        computeMove(-direction, thisOne, true, true);
    else if (listBlank.Contains(storedPos))
        blankTileProcess(3, storedPos);
    else if (blueGoal.Contains(storedPos))
        levelSolved(thisOne);
    // get out of there
    return;
}

} // transform blank tile void blankTileProcess(int color, Vector3 vPos) { int i = listBlank.IndexOf(vPos); // UnityEngine.Debug.Log(listBlank.IndexOf(vPos) + " -> " + vPos); // colored blank tile with a new color if (Time.timeScale < 1.5f) { if (stampBlank[i] == 0) { // is this tile blank? stampBlank[i] = listMov.Count; obj.GetComponent().blankTiles.transform.GetChild(i).GetComponent().sharedMaterial = obj.GetComponent().materials[color]; // play a sound if (loader.GetComponent().paint != null && loader != null) loader.playSound(loader.paint, this.transform, true, 0.5f, 0.9f, _loader.paint.length, false); // ... or you can use item selection instead of an integer if (color == 1) redTilesPos.Add(vPos); else if (color == 2) greenTilesPos.Add(vPos); else if (color == 3) blueTilesPos.Add(vPos); else return; } } } ```

To get an inverted clockwise system, allowing the player to come back in time, I used a movement list according to the object and its direction. So the number of steps which are available is computed according to the List.Count integer. We got something like that :

``` // all movement have been saved so as to allow back in time void backInTime() { while (listMov.Last().artefact != cc[index]) splitCube();

if (listBlank.Contains(cc[index].transform.position - shift))
{
    int i = listBlank.IndexOf(cc[index].transform.position - shift);
    // disable a blank tile which has been colored before
    if (stampBlank[i] == listMov.Count)
    {
        obj.GetComponent<LevelConstructor>().blankTiles.transform.GetChild(i).GetComponent<Renderer>().sharedMaterial = obj.GetComponent<LevelConstructor>()._materials[7];
        stampBlank[i] = 0;
        // new blank status
        redTilesPos.Remove(cc[index].transform.position - shift);
        greenTilesPos.Remove(cc[index].transform.position - shift);
        blueTilesPos.Remove(cc[index].transform.position - shift);
    }
}
// invert movement
computeMove(-listMov.Last().movement, listMov.Last().artefact, false, true);
deleteLast();

} ```

My favorite feature is the rounded blank tile which the player paints when a cube walks on it. This is not an easy feature because of one point - you can back in time. So its status must change too. So I implemented a tag on them in order to "clean up" tiles when retrograded cube passes again on a previous tile which has been colored. This tag is just an integer - the step when the tile has been colored. Take a look at the end of the first script - the blankTileProcess() function. In the previous script, you got the code which compute the state of the tile during the right moment.

Some parts of these codes could be improved. As an a single example, I use Time.timeScale like a tag - and I don't like it. There are too many GetComponent occurences in these scripts - and it's not the best way to get a hand on an object. So I have many to do :wink:
For the FX I used some shaders and this project is my first one using the Unity URP system. I tested this option, but I guess that a legacy system could be "enough". I am developing more levels in order to release a full game with 50 levels. I have only one scene for them, and when you see a black screen, it's just a short time to erase the previous level, creating the next... Also I am proud of my level selection system. before I created a button for each level. Now I have only one script to generate how many buttons are required. This script is really useful. Then I share it with you.

``` using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;

public class DisplayButtons : MonoBehaviour { public Transform button; public int buttonOnX = 10; public int buttonOnY = 5;

Vector3 nextPos = Vector3.zero;
public int spacingX = 80;
public int spacingY = 80;

Vector3 shift;
int id = 0;

void Start()
{
    displayThem();
}

public void displayThem()
{
    nextPos.y = 0;
    id = 0;
    shift = new Vector3(((buttonOnX * spacingX)/2) - (spacingX/2), (-(spacingY * buttonOnY)/2) - (spacingY/2), 0);

    for (int i = 0; i < buttonOnY; i++)
    {
        nextPos.y -= spacingY;
        nextPos.x = 0;

        for (int j = 0; j < buttonOnX; j++)
        {
            id++;
            RectTransform myButton = Instantiate(button as RectTransform);

            myButton.GetComponentInChildren<Text>().text = (id).ToString();
            myButton.GetComponentInChildren<Text>().fontSize = 40;
            myButton.GetComponentInChildren<Text>().color = new Color(0.2f, 0.22f, 0.5f, 0.9f);
            myButton.GetComponentInChildren<Image>().color = new Color(0.7f, 0.5f, 0.8f, 0.9f);
            myButton.SetParent(transform, false);
            myButton.localPosition = nextPos - shift;

            nextPos.x += spacingX;
            int level = PlayerPrefs.GetInt("Level", 1);

            if (id > level && !Application.isEditor)
            {
                myButton.GetComponentInChildren<Button>().interactable = false; // disables button for scene that isn't available
                myButton.GetComponentInChildren<Text>().color = new Color(0.2f, 0.22f, 0.5f, 0.45f);
            }
        }    
    }
}

} ```

I exposed some parts of my project, just sharing with you some keys. I guess that it could be improved - and with more time, I will do it. If you want to test the result, the game is available on Itch.io for free. Play, leave a comment - and this way, I can find your own project which I wanna play. Thank you for your support everyone. I wish you the best ++

https://ldjam.com/events/ludum-dare/55/virtual-church-of-the-digital-goddess

VCDG.jpeg

Bye bye - пока пока - salut

:love_letter: :heart: :rose: :frog:

:flag_gb: Hello everyone. This event is now closed - and as usual I would like to post some words just to say Thank you. The theme really sucked - I did not like it this time, but it's the game. Finally I don't complain because I saw many interesting projects - and mine is not so bad. I plan to create a full game according to this first release - a solid puzzle game with more levels and more features. Stay tuned... I hope that this year I can finalise two projects - this one Virtual Church of the Digital Goddess - and StarDust. I wish you the best. Stay safe - and see you later alligator ++

:flag_ru: Всем привет. В конце концов, это мероприятие закрыто, и как обычно, я бы хотел написать короткое сообщение, чтобы сказать вам спасибо. Тема мне не понравилась, но я не могу обойти - это так. Наконец-то я не жалуюсь, потому что увидел много интересных проектов - и мой не так плох. Я планирую разработать полноценную игру по этому первому выпуску — головоломку с большим количеством уровней и большим количеством функций. Оставайтесь со мной... Надеюсь, что в этом году мне удастся завершить два проекта - Виртуальная Церковь Цифровой Богини - и СтарДуст - Звездная Пыль. Желаю вам всего наилучшего. Берегите себя. Пока пока ++

:flag_fr: Salut à tous. Finalement, l'événement a passé et comme à mon habitude, je voudrais poster ici quelques mots de remerciement à chacun. Objectivement, je n'ai pas aimé le thème, mais c'est comme ça, parfois, on ne peut pas l'éviter. Je ne m'en plains pas trop puisque j'ai vu ici beaucoup de projets intéressants et le mien n'est pas si mauvais. J'ai décidé d'en faire quelque chose de plus solide - un jeu de réflexion avec plus de niveaux et plus de fonctionnalités. Soyez à l'écoute... J'espère que cette année, je parviendrai à terminer deux projets - Virtual Church of the Digital Goddess et StarDust. Je vous souhaite le meilleur. Soyez prudents. À bientôt ++

VirtualChurch01.jpg

StarDust04.jpg

As they say... :smileycat: как говорят... :smileycat: et comme on dit... :smiley_cat:

https://www.youtube.com/watch?v=KodNFsP6r88

StarDust

4Lbs+H.jpg

Weird game - if you like unusual visual ++

https://geckoo1337.itch.io/stardust

Ludum Dare 56

Done

LD56.jpg

Santorini Islands

Hello everyone. My first LudumDare event had been the 27th - so eleven years ago. Since this LD, I am always with you - two or three times by year. However, for the first time, I will far from home - something like 3000 kilometers from Luxembourg. So I was searching a good place near my hotel because I would like to participate again - as usual. I guess that I found a little spot on the beach - a quiet tavern. I have my old computer, an internet connection (not the best which I have hever seen, but not the least), my own template on GitHub and fresh cocktails. So I can say with confidence that I'm in! I wish you the best. Stay safe and enjoy the next LudumDare. See you later, my dear friends. Bye ++ IMGem20240930/em085238.jpg

IMGem20241002/em110328.jpg

IMGem20241002/em105518.jpg

You are not supposed to be here

You are not supposed to be here - the best theme which has been submitted - because it is mine 😁 No matter what it will be at the end - don't forget that the theme always sucks. First rule ++

Let's go boys

Not the worst place on earth to participate. I wish you the best ++

IMGem20241005/em093930.jpg

Do you need votes?

My project is in the danger zone. I need more votes. I don't expect anything, but I would like to get a final score - that's all. So rate this little project and I will rate yours if you are in the same bad position. My entry is a little GOL simulator. Take a look - download and test the project - leave a comment. Have a nice day bro' ++

https://ldjam.com/events/ludum-dare/56/tiny-creatures-1

65b78.jpg

StarDust

Hello my friends. I would like to share with you some news about my biggest project - StarDust - which is an exploration game with an unusual aesthetic using colors as depth. I made many changes according to the first release which got some good ratings in the categories #Mood and #Graphics for the 54th LudumDare (respectively 4th and 6th). If you want to test it, there is a technical demo on Itch.io and I will appreciate any comment or feedback. I wish you the best. Thank you for your help ++

https://geckoo1337.itch.io/stardust

StarDust.jpg

Ludum Dare 57

Theorem for free

As usual, my old puzzle game is free for a few days in order to celebrate the next LudumDare session. I wish you the best my dear friends. And don't forget, the theme always sucks :cat:

https://www.youtube.com/watch?v=tVeq4l7NPsk

https://geckoo1337.itch.io/theorem

RainDrops

After the first day struggling hard with some shader codes, I have finally my technical demo. I am creating an echo system giving depth in game throwing bubbles which display ripples. The effect is cool, stable and efficient. Now I take time to refresh myself (maybe watching a movie)... Tomorrow I will create the scene. I hope that you have fun developing your own entry. I wish you the best. See you later ++

LD57.png