Would this idea be a good concept for a game i was thinking about this?

This would be a 4D game, kind of. Basically, it would be a puzzle game, but the twist is that every set amount of time, for example 10 seconds (I'm not sure what the actual time would be yet), the level would reset. However, when the level resets, you would see your past actions being replayed while you play through the level again.

The reset would happen over and over, and every time it resets, another version of yourself would replay everything you did during the previous run. To finish the puzzle, you would need to solve all of the objectives across multiple resets. The main twist is that your previous versions can help you complete the level.

For example, imagine there are three buttons that all need to be pressed at the same time to finish the level. You only have 10 seconds per version, so you can't realistically press all three buttons yourself. Instead, during your first run, you press button 1. The level resets, and your previous version now replays the exact actions you took, meaning it presses button 1 again. While that is happening, you can go and press button 2. The level resets again, and now your first version presses button 1 while your second version presses button 2. You can then go and press button 3. Now all three buttons are being pressed by different versions of yourself, allowing you to complete the puzzle.

That would basically be the main mechanism of the game. The example above would be a simple beginner puzzle designed to teach the player how the mechanic works. As the game progresses, the puzzles would become increasingly difficult. I haven't fully thought out the levels yet, but I think there could be some really interesting combinations and situations where you have to carefully plan out exactly what you are going to do across multiple resets.

When I say "hard," I don't mean difficult platforming or requiring really precise jumps. I mean mentally difficult, where you have to think about your actions several steps ahead and figure out how your different versions can work together.

Later levels could also introduce limitations to make things more complicated. For example, you could have a limited number of versions that you are allowed to create, meaning you can't just keep resetting forever. Another mechanic could be that if you touch one of your past versions, the entire level immediately resets. This would force you to carefully plan your movement and think about where your previous versions are going to be at each point in the level.

There could also be other mechanics built around the idea of interacting with your past actions. The difficulty could come from combining these mechanics together and forcing the player to think about multiple timelines at once.

That's basically the whole mechanism for the game. I think the main thing would be coming up with interesting puzzles that make good use of it rather than just making the levels harder through platforming or reaction time.

I hope my explanation makes sense. I'm not very good at explaining things, so if anything is unclear, comment and I'll explain it.

reddit.com
u/wojbest — 2 days ago

just a thought for now haven't even started working on it but would it be fun?

I've been thinking about making a semi-realistic survival game and wanted to see if the core idea sounds fun.

It would have the usual survival mechanics: crafting, building, harvesting resources, health, hunger, thirst, animals, enemies, objectives, exploration and progression. I don't want it to be an ultra-realistic simulator where everything becomes tedious, though. The mechanics would be grounded enough to feel believable while still being enjoyable.

The main thing that would make the game stand out is the terrain and scale

In a lot of survival games, you'll see a massive mountain in the distance, but you can reach the top in a couple of minutes. I'd like my world to have much more realistic geographical scale. A huge mountain could actually be huge, potentially taking hours to reach and climb. The "three hours" example isn't fixed; I'm just trying to explain the scale I'm imagining.

The world would be procedurally generated, with large mountains, valleys, forests, rivers, deserts, plains, cliffs and other geographical features. I'd want the terrain to look beautiful and geographically coherent rather than just being random noise.

For example, you could stand in a valley and see a massive mountain range several kilometres away. You decide to make an expedition there, so you prepare food, water, tools, clothing and shelter materials. You travel through forests and valleys, potentially set up a temporary camp, deal with weather and temperature changes, and eventually climb the mountain.

The survival mechanics would be semi-realistic. Temperature, weather, food, water, injuries and shelter would matter, but I don't want the player constantly managing tiny statistics. Survival should create interesting decisions rather than become tedious.

I'd also want progression to feel logical. Instead of hitting a tree for 20 minutes, you'd start with primitive tools and use them to obtain the materials needed to make better tools, gradually unlocking more efficient ways of surviving and building.

Building would have a lot of freedom, similar to Minecraft, but within this much larger world.

The main idea is that the world itself is something worth exploring. If you see a mountain, canyon, forest or strange geological formation in the distance, you can actually go there, and the journey itself becomes part of the gameplay.

Obviously, there are already plenty of survival games with crafting, building and procedural worlds. I'm not claiming those mechanics are completely original. The part I'm interested in is combining them with genuinely massive-scale procedural terrain where distance and geography actually matter.

I'm wondering if this sounds like a genuinely fun game concept, or whether travelling for potentially hours to reach something would become tedious.

reddit.com
u/wojbest — 5 days ago

Any advice for someone who feels they are destined to be alone forever cause they talked to soo many girls yet nothing ever stuck and they are pushing 20 and they have never even had a gf or a first kiss or anything

reddit.com
u/wojbest — 30 days ago

why is the whole ide great but the debuggers so shit

like who thought it was just gonna be 1 long list ohh you have 100 variables good luck finding the one you need

reddit.com
u/wojbest — 1 month ago

Minecraft block in console but its HD

made in c sharp console app ive recently got bored and decided to make this from scratch like everything and as well learn more about 3d rendering and stuff.its really slow when its hd but im sure someone smarter than me could optimise it. the way i just get it hd is basically in the console i can press ctrl + scroll to zoom in and out and when i zoom out theres more characters available for use and the image gets sharper and vise versa could this be optimised and made into real minecraft sure will i do it and lose my sanity no but good luck to someone else if you want to suffer you can use my code as a starting place

using System;
using System.Diagnostics;
using System.Drawing;
using System.Numerics;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks.Dataflow;
using static System.Formats.Asn1.AsnWriter;
using static System.Net.Mime.MediaTypeNames;
class Program
{
    //good luck twin
    struct Color
    {
        public byte R;
        public byte G;
        public byte B;
    }
    //front back left right bottom top
  static Dictionary<string, int[]> CubeTextures = new Dictionary<string, int[]>()
    {
        { "Grass", new int[] { 3, 3, 3, 3, 2, 4 } }
    };

    struct Vertex
    {
      public  Vector3 Position;
        public Vector2 UV;
        public Vertex(Vector3 position, Vector2 uv)
        {
            Position = position;
            UV = uv;
        }
    }
    static Vector3 CameraPosition = new Vector3(0, 0, -10);
    
   static Color[] buffer;
    static float[,] depthBuffer;
    static int[] textures =  CubeTextures["Grass"];
    static Vertex[] CubeVertices =
    {
    // Front
    new Vertex(new Vector3(-0.5f,-0.25f,-0.5f), cubeNumberToUV(textures[0],new Vector2(0,1))),
    new Vertex(new Vector3( 0.5f,-0.25f,-0.5f), cubeNumberToUV(textures[0],new Vector2(1,1))),
    new Vertex(new Vector3( 0.5f, 0.25f,-0.5f), cubeNumberToUV(textures[0],new Vector2(1,0))),
    new Vertex(new Vector3(-0.5f, 0.25f,-0.5f), cubeNumberToUV(textures[0],new Vector2(0,0))),

    // Back
    new Vertex(new Vector3(-0.5f,-0.25f, 0.5f), cubeNumberToUV(textures[1],new Vector2(0,1))),
    new Vertex(new Vector3( 0.5f,-0.25f, 0.5f), cubeNumberToUV(textures[1],new Vector2(1,1))),
    new Vertex(new Vector3( 0.5f, 0.25f, 0.5f), cubeNumberToUV(textures[1],new Vector2(1,0))),
    new Vertex(new Vector3(-0.5f, 0.25f, 0.5f), cubeNumberToUV(textures[1],new Vector2(0,0))),

    // Left
    new Vertex(new Vector3(-0.5f,-0.25f,-0.5f), cubeNumberToUV(textures[2],new Vector2(0,1))),
    new Vertex(new Vector3(-0.5f,-0.25f, 0.5f), cubeNumberToUV(textures[2],new Vector2(1,1))),
    new Vertex(new Vector3(-0.5f, 0.25f, 0.5f), cubeNumberToUV(textures[2],new Vector2(1,0))),
    new Vertex(new Vector3(-0.5f, 0.25f,-0.5f), cubeNumberToUV(textures[2],new Vector2(0,0))),

    // Right
    new Vertex(new Vector3(0.5f,-0.25f,-0.5f), cubeNumberToUV(textures[3],new Vector2(0,1))),
    new Vertex(new Vector3(0.5f,-0.25f, 0.5f), cubeNumberToUV(textures[3],new Vector2(1,1))),
    new Vertex(new Vector3(0.5f, 0.25f, 0.5f), cubeNumberToUV(textures[3],new Vector2(1,0))),
    new Vertex(new Vector3(0.5f, 0.25f,-0.5f), cubeNumberToUV(textures[3],new Vector2(0,0))),

    // Top
    new Vertex(new Vector3(-0.5f,0.25f,-0.5f), cubeNumberToUV(textures[4],new Vector2(0,1))),
    new Vertex(new Vector3( 0.5f,0.25f,-0.5f), cubeNumberToUV(textures[4],new Vector2(1,1))),
    new Vertex(new Vector3( 0.5f,0.25f, 0.5f), cubeNumberToUV(textures[4],new Vector2(1,0))),
    new Vertex(new Vector3(-0.5f,0.25f, 0.5f), cubeNumberToUV(textures[4],new Vector2(0,0))),

    // Bottom
    new Vertex(new Vector3(-0.5f,-0.25f,-0.5f), cubeNumberToUV(textures[5],new Vector2(0,1))),
    new Vertex(new Vector3( 0.5f,-0.25f,-0.5f), cubeNumberToUV(textures[5],new Vector2(1,1))),
    new Vertex(new Vector3( 0.5f,-0.25f, 0.5f), cubeNumberToUV(textures[5],new Vector2(1,0))),
    new Vertex(new Vector3(-0.5f,-0.25f, 0.5f), cubeNumberToUV(textures[5],new Vector2(0,0))),
};

    static bool loop = true;
    static Bitmap image;
    static bool once = false;
    static Vector2 cubeNumberToUV(int cubeNumber, Vector2 Offsets)
    {
        if (!once)
        {
            image = new Bitmap("texture-atlas-minecraft.png");
            once = true;
        }

        int tileWidth = image.Width / 16;
        int tileHeight = image.Height / 16;

        int column = cubeNumber % 16;
        int row = cubeNumber / 16;

        return new Vector2(
            (column * tileWidth) + (Offsets.X * tileWidth),
            (row * tileHeight) + ((1 - Offsets.Y) * tileHeight)
        );
    }
    static void Main()
    {
        Console.CursorVisible = false;
        
  
        while (loop)
        {
            Update();

        }
        Update();

    }
  static  float rotationAngle = 0.0f;

    static int width = 120;
    static int height = 30;

    static void Update()
    {
      

      


        
        width = Console.WindowWidth;
        height = Console.WindowHeight;
        rotationAngle += 0.1f; // Increment the rotation angle
        if (Console.KeyAvailable)
        {
            var key = Console.ReadKey(true).Key;

            if (key == ConsoleKey.W)
                CameraPosition.Y++;

            if (key == ConsoleKey.S)
                CameraPosition.Y--;
            if (key == ConsoleKey.A)
                CameraPosition.X--;
            if (key == ConsoleKey.D)
                CameraPosition.X++;
            if (key == ConsoleKey.Q)
                CameraPosition.Z-=1f;
            if (key == ConsoleKey.E)
                CameraPosition.Z+= 1f;
        }




        List<Vertex> ScreenPositions = new List<Vertex>();
        depthBuffer = new float[width, height];
        buffer = new Color[width * height];
        clearFrame();
        for (int x = 0; x < width; x++)
        {
            for (int y = 0; y < height; y++)
            {
                depthBuffer[x, y] = float.MaxValue;
            }
        }

        for (int i =0; i < CubeVertices.Length; i++)
        {
            int enlarger = 2;//67 meme ya 
            Vector3 worldPos = RotatePoint(CubeVertices[i].Position * enlarger); 
            worldPos -= CameraPosition;                   
            ScreenPositions.Add(new Vertex(PerspectiveProjection(worldPos), CubeVertices[i].UV));


        }
        for (int i = 0; i < ScreenPositions.Count; i += 4)
        {
            Vertex CurrentVertex = ScreenPositions[i];
            Vertex CurrentVertex1 = ScreenPositions[i+1];
            Vertex CurrentVertex2 = ScreenPositions[i + 2];
            Vertex CurrentVertex3 = ScreenPositions[i + 3];

            PlotLine(
        new Vector2(CurrentVertex.Position.X, CurrentVertex.Position.Y),
        new Vector2(CurrentVertex1.Position.X, CurrentVertex1.Position.Y),
        new Vector2(CurrentVertex2.Position.X, CurrentVertex2.Position.Y),
        new Vector2(CurrentVertex3.Position.X, CurrentVertex3.Position.Y),
        (CurrentVertex.Position.Z +
         CurrentVertex1.Position.Z +
         CurrentVertex2.Position.Z +
         CurrentVertex3.Position.Z / 4f),
         CurrentVertex.UV,
         CurrentVertex1.UV,
         CurrentVertex2.UV,
         CurrentVertex3.UV);

        }
        ScreenPositions.Clear();
        RenderFrame();



    }
    static void RenderFrame()
    {
        StringBuilder sb = new StringBuilder(width * height * 8);

        for (int i = 0; i < buffer.Length; i++)
        {
            sb.Append(ColorToAnsi(buffer[i]));
            sb.Append(' ');
        }

        Console.SetCursorPosition(0, 0);
        Console.Write(sb.ToString());
    }

    static string ColorToAnsi(Color c)
    {
        return $"\x1b[48;2;{c.R};{c.G};{c.B}m";
    }
    static void clearFrame()
    {
        Array.Fill(buffer, new Color { R = 0, G = 0, B = 0 }); ;
    }
    static Vector3 RotatePoint(Vector3 Point)
    {
        float CalcuateX = Point.X * MathF.Cos(rotationAngle) - Point.Z * MathF.Sin(rotationAngle);
        float CalcuateZ = Point.Z * MathF.Cos(rotationAngle) + Point.X * MathF.Sin(rotationAngle);

        return new Vector3(CalcuateX, Point.Y, CalcuateZ);
    }

    static void PlotLine(Vector2 p0, Vector2 p1, Vector2 p2, Vector2 p3,float depth, Vector2 p0UV, Vector2 p1UV, Vector2 p2UV, Vector2 p3UV)
    {
        Vector2 uv0 = p0UV;
        Vector2 uv1 = p1UV;
        Vector2 uv2 = p2UV;
        Vector2 uv3 = p3UV;
        float minBoundX = Math.Min(Math.Min((int)p0.X, (int)p1.X), Math.Min((int)p2.X, (int)p3.X));
        float maxBoundX = Math.Max(Math.Max((int)p0.X, (int)p1.X), Math.Max((int)p2.X, (int)p3.X));
        float minBoundY = Math.Min(Math.Min((int)p0.Y, (int)p1.Y), Math.Min((int)p2.Y, (int)p3.Y));
        float maxBoundY = Math.Max(Math.Max((int)p0.Y, (int)p1.Y), Math.Max((int)p2.Y, (int)p3.Y));


        for (int x0 = (int)minBoundX; x0 < (int)maxBoundX; x0++)
            for (int y0 = (int)minBoundY; y0 < (int)maxBoundY; y0++)
            {
          
                Vector2 p = new Vector2(x0, y0);

                bool inTri1 = PointInTriangle(p, p0, p1, p2);
                bool inTri2 = PointInTriangle(p, p0, p2, p3);
                
                if (inTri1)
                {
                    if (depthBuffer[x0, y0] > depth)
                    {
                        Vector2 w = Barycentric(p, p0, p1, p2);

                        float w0 = 1 - w.X - w.Y;
                        float w1 = w.X;
                        float w2 = w.Y;

                        if (float.IsNaN(w.X) || float.IsNaN(w.Y))
                            continue;

                        if (w.X < 0 || w.Y < 0 || (1 - w.X - w.Y) < 0)
                            continue;
                        Vector2 uv = w0 * uv2 + w1 * uv0 + w2 * uv1;

                        System.Drawing.Color c = image.GetPixel(
                            (int)(uv.X),
                            (int)(uv.Y )
                        );

                        buffer[y0 * width + x0] = new Color { R = c.R, G = c.G, B = c.B };
                        depthBuffer[x0, y0] = depth;
                    }
                }
                
                if (inTri2)
                {
                    if (depthBuffer[x0, y0] > depth)
                    {

                        Vector2 w = Barycentric(p, p0, p2, p3);

                        float w0 = 1 - w.X - w.Y;
                        float w1 = w.X;
                        float w2 = w.Y;

                        if (float.IsNaN(w.X) || float.IsNaN(w.Y))
                            continue;

                        if (w.X < 0 || w.Y < 0 || (1 - w.X - w.Y) < 0)
                            continue;

                        Vector2 uv = w0 * uv3 + w1 * uv0 + w2 * uv2;

                        System.Drawing.Color c = image.GetPixel(
                            (int)(uv.X),
                            (int)(uv.Y)
                        );

                    
                        buffer[y0 * width + x0] = new Color { R = c.R, G = c.G, B = c.B };
                        depthBuffer[x0, y0] = depth;
                    }

                }
                
            }
    }
    static Vector2 Barycentric(Vector2 p, Vector2 a, Vector2 b, Vector2 c)
    {
        float denom =
            (b.Y - c.Y) * (a.X - c.X) +
            (c.X - b.X) * (a.Y - c.Y);

        if (MathF.Abs(denom) < 0.00001f)
            return new Vector2(float.NaN, float.NaN);

        float w1 =
            ((b.Y - c.Y) * (p.X - c.X) +
             (c.X - b.X) * (p.Y - c.Y)) / denom;

        float w2 =
            ((c.Y - a.Y) * (p.X - c.X) +
             (a.X - c.X) * (p.Y - c.Y)) / denom;

        return new Vector2(w1, w2);
    }
    static bool PointInTriangle(Vector2 Point, Vector2 a, Vector2 b, Vector2 c)
    {


        float e1 = Edge(a, b, Point);
        float e2 = Edge(b, c, Point);
        float e3 = Edge(c, a, Point);

        return
            (e1 >= 0 && e2 >= 0 && e3 >= 0) ||
            (e1 <= 0 && e2 <= 0 && e3 <= 0);
    }
    static float Edge(Vector2 a, Vector2 b, Vector2 p)
    {
        return (p.X - a.X) * (b.Y - a.Y)
             - (p.Y - a.Y) * (b.X - a.X);
    }
    static int FOV = 60;
    static Vector3 PerspectiveProjection(Vector3 screenPosition)
    {

        float scaleX = width / 120f;
        float scaleY = height / 30f;

   

   
        float scale = 20f;
        float fovRad = FOV * (MathF.PI / 180f);
        float fovCalc = 1.0f / MathF.Tan(fovRad * 0.5f);

        float z = screenPosition.Z;
  
        if (z <= 0.1f)
            return new Vector3(0, 0, z);

        float XPos = screenPosition.X * fovCalc * scale / z;
        float YPos = screenPosition.Y * fovCalc * scale / z;

        XPos *= scaleX;
        YPos *= scaleY;

        XPos += width / 2f;
        YPos += height / 2f;

        return new Vector3((int)XPos, (int)YPos, z);
    }
}
u/wojbest — 1 month ago

What are some good games to play on the plane on a laptop? I need suggestions

So either something that is a keyboard only game like hollow knight or celeste or a game that doesn't require precision mouse movement like buckshot roulette

reddit.com
u/wojbest — 1 month ago
▲ 10 r/csharp

is there a way to get more colours when outputting to the console console .colour only has 16?

reddit.com
u/wojbest — 2 months ago
▲ 2 r/csharp

is there a way to set the console zoom permanently?

basically like in the console when you can zoom in and out with the scroll wheel is there a way to set that to a specific value?

reddit.com
u/wojbest — 2 months ago

Final update on my trash game + my thoughts

i fixed a bunch of issues mentioned

i know theres a 1 post per month rule but its something i kinda wanted to get off my back so i will just delete the other post and i will also probs never post here again or atleast not in a long time

since yesterday i have done a lot of thinking and I've come to the conclusion that i dont regret making this game is it bad sure but it has given me experience and has kinda given me something to do over the break plus its something that i can put on my cv im only 19 in uni so this willl look good considering the job market is kinda cooked and also if i ever start another project in the future this will help me achieve it you cant build rome in a day and you cant make a good game without experience im kinda yapping but ye u get what i mean its a good thing and bad thing

Paths

Playable Link: https://wojbest1.itch.io/paths

Platform: Windows

Paths is an adventure game where you walk along the path through a forest trying to get to the end where there is something at the end waiting for the player (sorry i suck at desc)

its completely free

u/wojbest — 2 months ago

Is my game trash? ive been working on it for soo long that at this point ive lost objectivity and i might have some imposter syndrome

Paths

Playable Link: https://wojbest1.itch.io/paths

Platform: Windows

Paths is an adventure game where you walk along the path through a forest trying to get to the end where there is something at the end waiting for the player (sorry i suck at desc)

its completely free

plz tell me should i quit?

u/wojbest — 2 months ago

How do i turn of these errors?

i genuinely do not care they aren't affecting my game in anyway and I'm not going through 100s of game objects and removing their mesh collider just to fix it but when i export the game all of this appears in the dev console or at least how do i hide the dev console

u/wojbest — 2 months ago

Why am im I playing against bots?

Im new to this game im currently lvl 4 but i keep getting put into bot lobbys only i understand im new but ive played many shooters before so im kinda dominating every single match and its boring is there any way i can turn this off?

reddit.com
u/wojbest — 2 months ago