W.A.S.D

Weird Action Survival Demo (no demo yet)
this is a game I’m making with my brother who does the sound
the setting of it is you’re on an alien planet and it’s you against the wild.
The Main Focus is the environment for example if you go and kill all the peaceful animals. then what will the predators eat well you of course? or Thay might leave then you might lose a valuable item Thay drop.
cut down all the tall grass animals hide in Thay will leave. too much pollution because of you. that won’t be good for the surrounding environment.

Road Map
Add more foulage.
Add textures and models.
Add AI systems.
Add more crafting smelting etc.
Add durability and attack speed to items.
Add more Biomes.
Add hunger and stamina maybe others.
Add animals.
this will be receiving update prop weekly.

Week 1
right now, I don’t have much to share it’s the first week of development and I’ve been on the Grind with Sebastyn Lague Landmass Generation Series. I’m at E16 here what I’ve got so far.

now back to the grind
I’ll probably be giving updates weekly.

1 Like

Week 2
I’ve been working on biome gen but the tutorial series I was using was never intended for biomes. I have managed to make some progress, but I don’t really know what I’m doing lol so any help would be appreciated here’s what I’ve got so far.

As you can see the biomes just repeat over and over again and I can’t figure out how to get it too have an off set based on which chunk it’s in here is the code for the biome gen

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class VoronoiDigram : MonoBehaviour
{
    [SerializeField] BiomeDate[] possibleBiomes;
    [SerializeField] Color[] possibleColors;
    [SerializeField] Material biomeMat;
    [SerializeField] int mapSize;
    [SerializeField] int gridSize;
    int pixelsPerCell;
     Vector2Int[,] pointPositions;
     Color[,] colors;

    private void Start()
    {
        BiomeColors();
        GenerateBiomes();
        GenerateBiomes();
    }

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.B))
        {
            GenerateBiomes();
        }
    }

    void BiomeColors()
    {
        for(int i = 0; i < possibleBiomes.Length; i++)
        {
            possibleColors[i] = possibleBiomes[i].color;
        }
    }


    private void GenerateBiomes()
    {
        GeneratePoints();
        Texture2D texture = new Texture2D(mapSize, mapSize);

        pixelsPerCell = mapSize / gridSize;

 

        for(int i = 0; i < mapSize; i++)
        {
            for(int j = 0; j < mapSize; j++)
            {
                int gridX = i / pixelsPerCell;
                int gridY = j / pixelsPerCell;

                float nearestDistance = Mathf.Infinity;
                Vector2Int nearestPoint = new Vector2Int();
                for (int a = -1; a < 2; a++)
                {
                    for(int b = -1; b < 2; b++)
                    {
               

                        int x = gridX + a;
                        int y = gridY + b;
                        if (x < 0 || y < 0 || x >= gridSize || y >= gridSize) continue;

                


                        float distance = Vector2Int.Distance(new Vector2Int(i, j), pointPositions[x, y]);
                        if (distance < nearestDistance)
                        {
                            nearestDistance = distance;
                            nearestPoint = new Vector2Int(x, y);
                        }
                    }
                }
                texture.SetPixel(i, j, colors[nearestPoint.x, nearestPoint.y]);

            }
        }

        texture.Apply();
        biomeMat.mainTexture = texture;
    }

    private void GeneratePoints()
    {
        pointPositions = new Vector2Int[gridSize, gridSize];
        colors = new Color[gridSize, gridSize];
        for(int i = 0; i < gridSize; i++)
        {
            for(int j = 0; j < gridSize; j++)
            {
                pointPositions[i, j] = new Vector2Int(i * pixelsPerCell + Random.Range(0, pixelsPerCell), j * pixelsPerCell + Random.Range(0, pixelsPerCell));
                colors[i, j] = possibleColors[Random.Range(0, possibleColors.Length)];
            }
        }
    }

 
}

and here is the endless terrain script

using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEditor.AssetImporters;
using UnityEditor.Timeline;
using UnityEngine;
using UnityEngine.UIElements;

public class EndlessTerrainGen : MonoBehaviour
{
    Dictionary<Vector2, TerrainChunk> terrainChunkDictionary = new Dictionary<Vector2, TerrainChunk>();
    static List<TerrainChunk> terrainChunksVisibleLstFrame = new List<TerrainChunk>();

    const float movementThresholdForChunkUpdate = 25f;
    const float squrMovementThresholdForChunkUpdate = movementThresholdForChunkUpdate * movementThresholdForChunkUpdate;

    Vector2 viewerPosOld;

    public LODInfo[] detailLevels;
    public static float maxViewDistance = 500f;
    static TerrainGeneration terrainGen;

    public static Vector2 viewerPosition;

    [SerializeField] Material mapMaterial;

    [SerializeField] Transform viewer;

    [SerializeField] int chunkSize;
    [SerializeField] int chunksVisibleInViewDist;

 

    private void Start()
    {
        terrainGen = FindObjectOfType<TerrainGeneration>();

        maxViewDistance = detailLevels[detailLevels.Length - 1].visibleDistThreshold;
 
        chunkSize = terrainGen.mapChunkSize - 1;
        chunksVisibleInViewDist = Mathf.RoundToInt( maxViewDistance / chunkSize);

        UpdateVisibleChunks();
    }
    private void Update()
    {
        viewerPosition = new Vector2 (viewer.position.x, viewer.position.z) / terrainGen.terrainDate.uniformScale;
        if((viewerPosOld - viewerPosition).sqrMagnitude > squrMovementThresholdForChunkUpdate)
        {
            viewerPosOld = viewerPosition;
           UpdateVisibleChunks();
        }
 
    }
    void UpdateVisibleChunks()
    {
        int currentChunkCoordX = Mathf.RoundToInt(viewerPosition.x / chunkSize);
        int currentChunkCoordZ = Mathf.RoundToInt(viewerPosition.y / chunkSize);
        for(int i = 0; i < terrainChunksVisibleLstFrame.Count; i++)
        {
            terrainChunksVisibleLstFrame[i].SetVisible(false);
        }
        terrainChunksVisibleLstFrame.Clear();
        for (int zOffSet = - chunksVisibleInViewDist; zOffSet <= chunksVisibleInViewDist; zOffSet++)
        {
            for (int xOffSet = -chunksVisibleInViewDist; xOffSet <= chunksVisibleInViewDist; xOffSet++)
            {
                Vector2 viewedChunkCoord = new Vector2(currentChunkCoordX + xOffSet, currentChunkCoordZ + zOffSet);

                if(terrainChunkDictionary.ContainsKey(viewedChunkCoord))
                {
                    terrainChunkDictionary[viewedChunkCoord].UpdateTerrainChunk();
           
                }
                else
                {
                    terrainChunkDictionary.Add(viewedChunkCoord, new TerrainChunk(viewedChunkCoord, chunkSize, detailLevels, transform, mapMaterial));
                }
            }
        }
    }
    public class TerrainChunk
    {
        GameObject meshObject;
        Vector2 position;
        Bounds bounds;

        MeshRenderer meshRenderer;
        MeshFilter meshFilter;
        MeshCollider meshCollider;

        LODInfo[] detailLevel;
        LODMesh[] lODMeshes;
        LODMesh collisionLODMesh;

        MapDate mapDate;
        bool mapDateReceived;
        int previousLODIndex = -1;

        public TerrainChunk(Vector2 coord, int size, LODInfo[] detailLevel, Transform parent, Material material)
        {
            this.detailLevel = detailLevel;

            position = coord * size;
            bounds = new Bounds(position, Vector2.one * size);
            Vector3 positionV3 = new Vector3(position.x, 0, position.y);

            meshObject = new GameObject("Terrain Chunk");
            meshRenderer = meshObject.AddComponent<MeshRenderer>();
            meshFilter = meshObject.AddComponent<MeshFilter>();
            meshCollider = meshObject.AddComponent<MeshCollider>();

            meshObject.transform.position = positionV3 * terrainGen.terrainDate.uniformScale;
            meshObject.transform.localScale = Vector3.one * terrainGen.terrainDate.uniformScale;
            meshObject.transform.parent = parent;
            meshRenderer.material = material;

            lODMeshes = new LODMesh[detailLevel.Length];
            for(int i = 0; i < detailLevel.Length; i++)
            {
                lODMeshes[i] = new LODMesh(detailLevel[i].lOD, UpdateTerrainChunk);
                if (detailLevel[i].useforColider)
                {
                    collisionLODMesh = lODMeshes[i];
                }
            }

            SetVisible(false);

            terrainGen.RequestMapDate(position,OnMapDateReceived);
        }

        void OnMapDateReceived(MapDate mapDate)
        {
            this.mapDate = mapDate;
            mapDateReceived = true;

    
   

            UpdateTerrainChunk();
        }

 

        public void UpdateTerrainChunk()
        {
            if (mapDateReceived)
            {
              float viewerDistFromNestEdge = Mathf.Sqrt( bounds.SqrDistance(viewerPosition));
              bool visible = viewerDistFromNestEdge <= maxViewDistance;
              SetVisible(visible);
              if (visible)
              {
                  int lODIndex = 0;
                  for(int i = 0; i < detailLevel.Length - 1; i++)
                  {
                      if(viewerDistFromNestEdge > detailLevel[i].visibleDistThreshold)
                      {
                          lODIndex = i + 1;
                      }
                      else
                      {
                          break;
                      }
                  }
                  if(lODIndex != previousLODIndex)
                  {
                      LODMesh lODMesh = lODMeshes[lODIndex];
                      if (lODMesh.hasMesh)
                      {
                          previousLODIndex = lODIndex;
                          meshFilter.mesh = lODMesh.mesh;
                      }
                      else if (!lODMesh.hasRequestedMesh)
                      {
                        lODMesh.RequestMesh(mapDate);
                      }
                  }

                  if(lODIndex == 0)
                  {
                        if (collisionLODMesh.hasMesh)
                        {
                            meshCollider.sharedMesh = collisionLODMesh.mesh;
                        }
                        else if (!collisionLODMesh.hasRequestedMesh)
                        {
                            collisionLODMesh.RequestMesh(mapDate);
                        }
                
                  }

                    terrainChunksVisibleLstFrame.Add(this);
              }
            }
   
        }

        public void SetVisible(bool visible)
        {
            meshObject.SetActive (visible);
        }

        public bool IsVisible()
        {
            return meshObject.activeSelf;
        }
    }

    class LODMesh
    {
        public Mesh mesh;
        public bool hasRequestedMesh;
        public bool hasMesh;
        int lOD;

        System.Action updateCallBack;

        public LODMesh(int lOD, System.Action updateCallBack)
        {
            this.lOD = lOD;
            this.updateCallBack = updateCallBack;
        }

        void OnMeshDateReceived(MeshDate meshDate)
        {
            mesh = meshDate.CreateMesh();
            hasMesh = true;

            updateCallBack();
        }

        public void RequestMesh(MapDate mapDate)
        {
            hasRequestedMesh = true;
            terrainGen.RequestMeshDate(mapDate, lOD, OnMeshDateReceived);
        }
    }

    [System.Serializable]
    public struct LODInfo
    {
        public int lOD;
        public float visibleDistThreshold;
        public bool useforColider;
    }
}

so, I decided to take a break from biome gen. and started on trees.


Thay drop branches and seeds over time and if you walk up to them, you can shack them to make them fall faster right now all the models are place holders. Next I’ll be working on inventory tell me what you think.

2 Likes

Week 3
this week I’ve been hard at work on the inventory and hot bar. I decided to take inspersion from “Ark” and “Subnatica” (partly because there easier to make) because Thay feel nice, and I really enjoyed the games.

Here’s a screenshot of them in my game.

so, on the left you have your items, and, on the right, you have your blue prints the bottom is obviously you hotbar. Basically, which ever hot bar slot is selected when you hit the equip button is where the item gets assigned. The hotbar is not 100% complete but it’s not very far from it.
Crafting
I’ve got that working so basically when you hit craft it checks if you have the required items then it checks if you have the required tools. Then it has you pick out which items and tool you want to use.
Then you start a mini game (which I kept short, so it doesn’t become too tidies) and depending on how high quality your tools and ingredients are depends on how easy it is to get a better item.

I do plan to change up the UI in the future. The goal of the mini game is that when the in this case orange node gets inside of the green one you click on it there’s two types of nodes the orange one you see on screen stops in the center of the screen then it’s value slowly start’s draining away it also stops all other nodes from spawning till you click it.
the second node doesn’t stop on the dot and goes across the screen pretty quickly.

This week I plan to add spawning for the trees and more crafting also add durability to the items.

1 Like

Week 4
Woohoo it’s been one month since the start of development! The post has gotten 200 something views but zero likes or comments.
Any way this week the first thing I did was finish the hot bar. Then I had my siblings play test it (Thay broke it) so then I had to fix all the things Thay broke. the glitches where the usual walking though trees crafting when you don’t have the required items flying. so, I spent a while fixing all that then I started on
Biomes Kinda
This is the first system I came up with. At spawn there’s one empty game Object that checks if there’s anything under it. Then it goes to the ground and spawns up to ten other spawners in random positions then it also spawns a random amount of tree and rock spawners. then the next set of spawners does the same thing and I think you can see what’s wrong with this. It crashed the game.

So, the next method I tried was similar the difference was that instead of the spawners spawning them self’s every chunk made its own spawner that only spawn tree and rock spawners. this how ever did not look natural at all and had very noticeable gaps in where there just wasn’t anything.

The third method I tried was where the spawners instead of spawning a random amount off tree or rock spawners Thay spawn a biome from an array. Right now, there is only one biome forest, but I know it’s very expandable I also added grass and reeds (I guess)


the grass is really laggy right now, but I plan to fix that this week.
but any way then I found this video abut lighting.
Unity URP Tutorial - Lighting And Post-Processing
By LMHPOLY

you can’t see that much a difference in this screen shot but trust me there’s a difference.
I would Definitely check it out the video If I where you.

then I told my brother I changed the lighting, and he asked if I added A Day night cycle, and I said no and as a joke he said he was disappointed in me, so I added a day and night cycle.
At first, I tried on my own, but I ended up using this video.
Creating a Day/Night Cycle (Unity Tutorial)
by

Ketra Games

this is the result with both the videos at night.

It’s kind of scary perfect time for something to jump out from behind and eat the player.

Welp on to week 5 I’ll be trying to fix the lag in the game. some feedback on how I could do this would be vary Apricated.

1 Like

Week 5
So not much to say this week I haven’t had much time, and the games frame rate is kinda discouraging but I think this week will be different and I’ll make more progress.

all I’ve managed to do without it is take the frame rate from below 15 to sometimes above 15.

Music
so Starfall here I’m the music sound maker so here is some of that

(Links to the music on “BandLab”)

ok StarSilver again hope you like StarFalls music he’s got more in progress and now week 6 will be more debugging so see you then (unless someone comment in that cass I’ll be glad to replay).

1 Like

Week 6
same as last time I haven’t had that much time and all I did was bug fixes.

this week I’ll hopefully get to the good stuff can’t make any promises though. :frowning:

1 Like

So this is the project you working now? WASD (why you choose this name lol…) looks a good game idea, but i may not be so helpfull in bugfixes or others because you are working on complex stuff… Please make a video of the gameplay or give a demo for better review pls

Tip: amazing course i found that is carring all my game: Design and Publish Your Original Game: Unity USC Games Unlocked - Unity Learn

I’m not at the play testing faze yet not much to “play” and as for a video my google account is acting up so I can’t really do that ether unless there’s a way I’m unaware of.

thanks for the tip though I’ll definitely be going back to that.

1 Like

Week 7
Ok so to I got the game to run just below 50 frames per second. then we added two more
biomes (to test how the biome spawning worked) the meadow and the marsh.
[


This is the meadow later on all the biomes will have their own tree, and grass types. But for now, this will do.


Here is the marsh right now it isn’t that different from a forest like I said we just wanted to test out how the biomes would spawn/blend.

I also changed the grass Unity’s primitives are insanely laggy. If you can avoid using primitives, do it!

Current known things causing lag
-The grass it did get redone but with how much I need for the meadow it’s still too many vertices.
Possible fixes redo it again and spare no expense (probably not), use billboards for far away grass, use a really advanced script to render the grass (please don’t be this one :()
-The reeds are currently using Unity’s primitive objects so it’s using way too many vertices.
Possible fixes make a new module in Blender.
-The spawner script so this is how the game spawn’s things each chunk spawns in and has a spawner that choices a forest, meadow, or marsh spawner which then spawns all the things it needs for the biome trees grass rocks etc.
that part works fine the part that doesn’t work is the trees each have this script and over time they drop sticks and seeds (which do nothing right now). They also can be interacted with by the player to make them drop things.
and thousands of trees checking if a certain amount of time has paced might be a bit to laggy.
Possible fixes ditch this mechanic hahahah. Just kidding I’ll have to make the script work with unity’s job system.

Music
More music!!!
here’s the link BandLab - Make Music Online

glad to have a week that doesn’t just say did bug fixes. :smile:

1 Like

Week 8
Ok so this week we got a few things done.
first StarFall has started work redoing the reed.


This is not the final version and I know it doesn’t look like a read but remember this game takes place on an alien plant.
Also, the ring on the top glows slightly in the dark.

next I added a new crafting recipe the reed rope. You’ll use this to make most of your primitive tools knifes hammers axes etc.
Then we added the primitive hatchet.


Like most things in the game this is a place holder

so far, everything is working mostly right.

Next week Is going to be code clean up and like always fixing the lag.

Now i started to think about a thing: even if not intentionally, are you remaking Minecraft? Cause this is getting pretty similar. Craftings, starting with wood, etc. is things that compose the game (except that minecraft is voxel and yours have plenty interresing and promising graphics)

The game style is reminding me the game Slime rancher 2 (a sucessfull game made in unity :)), which have some interessing stuff that you could use as base. As your game is set on an alien planet, you could make good use of light, emissions, add space themed content, and put creativity to work.

Also, is enough for that bad quality grass, wood, etc, right? I can do some small texture maps if you want or, if there is no problem in using a little bit of money, you could try the site textures.com, a good place for find any content (particulary texture maps with plenty resolution and models)

The wood is not staying the same neither is the grass there still place holders.

As for the thing about MineCraft there are tons of survival games ARK, Subnatice, Terraria, Valiham, Astroneer, and then the new one Pokemon with guns lol. In most of these you start with nothing but your hands so naturally you get what ever’s closest to you to start and usually that’s wood. so I wouldn’t say any of these games are like MineCraft because of this however I do acknowledge none of these would exist if there was no MineCraft (don’t imagen that terrible reality) If you think about it though there might not be any platformers if there was no Mario and the whole of first-person shooters used to be could by “Doom clones”

And for SlimeRancher2 I have played that and didn’t notice that my game and it’s graphics do kind of look similar of course their game has much better lighting. which I do plan to improve my lighting.

Week 9
The first thing I did this week was change the health and death script which I use on basically everything in the game the player, trees, sticks, rocks, and tools. This way everything can be destroyed. The problem with the script was that every single thing in the game checked if it had hp regen (rocks and tools would not) and if it did it checked if it was time for it to regen, and as anybody could see this is a problem (except me lol) so what I did now is that if something takes damage it checks if it has hp regen, and if it does it starts a coronatine that waits then updates the hp then deactivates after hp gets to the max.

the other thing I did was documentation (this is how you use the word right?)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class HealthAndDeathScript : MonoBehaviour
{
    public enum DamageTypes {Bludging, Slashing, Pircing, Burning, Frezzing, posining, lightning}
   
    [SerializeField] DamageTypes[] damageAmunitys;
    public float maxHP = 100f;
    public float hp;
    [SerializeField] float timeWaitingForRegen;
    public float natralHPRegenSpeed = 10f;
    public float natralRegenAmount = 3f;
    [SerializeField] bool hasNatralRegen;
    public GameObject[] itemsTooDrop;
    public Vector3[] itemDropPos;
    public Quaternion[] itemDropRotation;

    private void Start()
    {
        hp = maxHP;
    }

  
    IEnumerator UpdateHealthRegen()
    {
        if(hp < maxHP)
        {
            while (hp < maxHP)
            {
                timeWaitingForRegen += Time.deltaTime;
                yield return null;
                if (timeWaitingForRegen > natralHPRegenSpeed)
                {
                    Heal(natralRegenAmount);
                    timeWaitingForRegen = 0;
                }
            }
        }
       
    }

    public void Heal(float healAmount)
    {
        hp += healAmount;
        if(hp > maxHP)
        {
            hp = maxHP;
        }
    }

    public void Damage(float damage, DamageTypes damgeType)
    {
        for(int i = 0; i < damageAmunitys.Length; i++)
        {
            if (damageAmunitys[i] == damgeType)
            {
                damage = 0;
            }
        }
        hp -= damage;
        if (hasNatralRegen)
        {
            StartCoroutine(UpdateHealthRegen());
        }
        if (hp <= 0)
        {
            Die();
        }
    }

    void Die()
    {
        for(int itemsDroped = 0; itemsDroped < itemsTooDrop.Length; itemsDroped ++)
        {
            Instantiate(itemsTooDrop[itemsDroped], gameObject.transform.position + itemDropPos[itemsDroped], itemDropRotation[itemsDroped]);
        }
        Destroy(gameObject);
    }

    private void OnTriggerEnter(Collider other)
    {
            gameObject.transform.SetParent(other.transform);
    }
}

this is what it looked like before

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class HealthAndDeathScript : MonoBehaviour
{
    //the types of damage (other scripts will acsess this in order for damage types to be consistent)
    public enum DamageTypes {Bludging, Slashing, Pircing, Burning, Frezzing, posining, lightning}
   
    //the damage this gameobject are amune to
    [SerializeField] DamageTypes[] damageAmunitys;
    // stats for hp regen
    public float natralHPRegenSpeed = 10f;
    public float natralRegenAmount = 3f;
    float timeWaitingForRegen;
    [SerializeField] bool hasNatralRegen;
    //hp and max hp
    public float maxHP = 100f;
    public float hp;
    //items to drop on death where they spawn and the rotation they spawn at
    [SerializeField] GameObject[] itemsTooDrop;
    [SerializeField] Vector3[] itemDropPos;
    [SerializeField] Quaternion[] itemDropRotation;

    private void Start()
    {
        //set hp to max at start of game
        hp = maxHP;
    }

  
    IEnumerator UpdateHealthRegen()
    {
        if(hp < maxHP)//check if the coroutine is nesecery
        {
            while (hp < maxHP)
            {
                //while not at the max hp update time waiting
                timeWaitingForRegen += Time.deltaTime;
                //wait one frame so the game doesn't crash
                yield return null;
                if (timeWaitingForRegen > natralHPRegenSpeed)
                {
                    //if the time waiting is higher then the time to wait heal and set time waiting to zero
                    Heal(natralRegenAmount);
                    timeWaitingForRegen = 0;
                }
            }
        }
       
    }

    public void Heal(float healAmount)
    {
        //heal then make sure hp is below max
        hp += healAmount;
        if(hp > maxHP)
        {
            hp = maxHP;
        }
    }

    public void Damage(float damage, DamageTypes damgeType)
    {
        for(int i = 0; i < damageAmunitys.Length; i++)// for every type of damage this game object is amune to check if it's been hit by that damage and if so take no damage
        {
            if (damageAmunitys[i] == damgeType)
            {
                damage = 0;
            }
        }
        hp -= damage;
        if (hasNatralRegen)// start hp regen if game object has it
        {
            StartCoroutine(UpdateHealthRegen());
        }
        if (hp <= 0)//die if is dead
        {
            Die();
        }
    }

    void Die()
    {
        //drop all items too drop before death
        for(int itemsDroped = 0; itemsDroped < itemsTooDrop.Length; itemsDroped ++)
        {
            Instantiate(itemsTooDrop[itemsDroped], gameObject.transform.position + itemDropPos[itemsDroped], itemDropRotation[itemsDroped]);
        }
        Destroy(gameObject);
    }

    private void OnTriggerEnter(Collider other)// the chunks have triggers so sets to be a child of the chunk its in
    {
            gameObject.transform.SetParent(other.transform);
    }
}

and this is now maybe it’s a bit over kill, but I don’t know if future me will get hit in the head really hard or not. Or if I’ll end up needing someone else to work on this script. Future me could also just forget.

I should have documented it while making it instead of waiting two months, but I’ve got most my scripts done now.

So, this week will probably be mostly the same thing.

1 Like

You could add some building layer for make game more interactive, and make a small playable demo for show what your game is about. Also, unity learn itself have stuff for help you to learn how to make better performace in heavy games, particulary for optimize to mobile (consider that my desktop is almost a mobile because is kinda slow). I know it seems that im weirdly hyped, but your game idea seems cool :slight_smile:

1 Like

Week 10
This week I finished documenting all of my script
except a few I forgot how they worked (there not being used anyway) Plus the terrain gen scripts I used youtube to make them so I can re-watch that if I need too

Some irl stuff came up so I haven’t had time too work vary much this week but things are looking good

And thanks to developer3244 the feed and encouragement is appreciated a demo isn’t vary possible for a while (unless you want to walk around and chop down trees and thats it)

There was also a solor eclipse in my area that was cool:)

Next goals are more crafting modeling and Ai(which I’m excited and slightly scared about making)

Yes, a total solar one, a very rare one you dont see always… this didnt happened where i leave, and even if it does, i would see only a very cloudy sky :wink:

About AI, i guess you mean enemies that are AI based, that can attack player, etc. If yes, i found stuff with one of my best friends Copilot:

The Science Behind Game AI: Understanding the Algorithms and Techniques (trailyn.com)
Enemy AI in Unity - Game Dev Beginner
https://docs.unity3d.com/2020.3/Documentation/Manual/Navigation.html (that one was me only)

also, i found an interessing channel with good videos: (5) FULL 3D ENEMY AI in 6 MINUTES! || Unity Tutorial - YouTube (just ignore the less recent ones, some are just nothing usefull)

More cool videos i found made by a popular yt one:

Look at what i found and see if will be usefull for your game with actually bad UI:

I still didnt used it, but its free and seems powerfull enough for several types of UI easily.

More stuff for you see if will be usefull:

How To Code Survival Games In Unity - Best Tutorials (gamedevacademy.org)
Optimizing for Performance - Unity Learn
Performance optimization for high-end graphics | Unity
How To Create Hunger & Thirst Survival Mechanics Unity 3D Tutorial - YouTube

Week 11
This was a slower week then I wanted but sometimes we don’t get to choose sigh
Anyway, mostly what I’ve done is research what type of ai (for the animals) a problem I saw fast was that I can’t use navmesh agents because they have to be baked before run time. Problem is I make the map on run time see as the world is procedurally generate that can’t really be changed.

I’m pretty sure a can use recasts to determine movement.

This is the structure I’m going for the ai, so there will be dens and each den will have a set number of animals living in them and it will randomly place animals around it. Then the animals will have short and long term memory which will each have a limited amount of space (long term obviously more than short) and so if they encounter a new animal they’ve never seen before they’ll assess the situation then based on past experiences and personality trats (such as being fear full or carefree)

Say if they see a bigger animal then them and they don’t have any memories of this type of animal. But they have a memory of something bigger than them say the player and the player choose to feed them they might investigate farther but Thay could also be fear full, so they just watch and if the thing sees them and goes towards them at a faster speed then Thay like they’ll run away. then they’ll have a memory of this and when Thay go back to their den they’ll tell the others there and when Thay sleep short term memories transfer to long term.

Defiantly vary ambitious but the games about the environment so I’m going to go big on the animal AI.

so, this week that’s what I’m doing continuing on animal Ai.:smile: