Released Endless RPG

Kezarus

Endless Game Maker
LOGO.png


  • Create a Party
  • Train and Expand your party
  • Kill the Black Loners
  • Destroy Evil Centers
  • Share your thoughts! =]

Hi everyone! This is a project that I started in the end of 2017. So far I did a LOT of things. My game is about freedom, tactics and decisions that matter.

You will be able to generate a random living world! Medieval high fantasy style. Tired from the world that you played but want the same party? Go on, generate a brand new world to explore with your favorite band of misfits. Day night cicle included. And it changes with the seasons too! And a weather system with clouds and fog.
World1.jpg
World2.jpg

And what if I tell you that this random map is genereted in front of your eyes?

You can create a party that is composed by different characters. Everything is permited. Want a warrior that plow through enemies with powerful attacks? Check. Want a more cunning and evasive one? You got it. Mages that can harness a destructive power? Or maybe a more defensive and healing oriented one? Maybe a support druid kind? You got it covered! Even a mix between all of this is possible (and can even be VERY powerful). There is still five races to pick. Oh, and appearence is customizeable for each character too! Graphics by Oryzano.
Party.jpg

The rules are simple and are based on:
  • Small numbers (3 Attributes ranging from 0 to 5, Health 10 to 20 and so on)
  • Rock-Paper-Scissors mind set (a tool, skill and strategy for each case)
  • Less is more mentality (texts and descriptions are reduced to be in a line or less)
  • You can check Rules, Skills and Items on these links =]

There are 150+ skills from combat to magic. Each skill is meaningful, granting a tangible advantage. Each character can learn up to 18 of those skills. Each skill will be trained on a town for a price.

There are 118 items among weapons, armor, arcane focus and even firearms! But there is NO ULTIMATE WEAPON, each one is a tool and is good in some situations and bad in others. Combat is turn based. Inspired on Battle Brothers and XCOM. But it is more than point and click. You want to hit an enemy? You have to do a simple and fast minigame based on character animation.

Animations! Many animations based on weapon and some skills.
Holy.gif

Most of the combat is developed, even a computer adversary is already up and running. The map generator is very good already and the living world is done! Towns grow as time goes by. Buildings are destroyed and constructed. And they have a direct impact on what can be bought in the market.

But this is a work of love. I find pleasure to develop each feature. I have a Backlog and a Diary for this project. Me and my brother are commited to do this at the top of our capabilities. We even hired Oryzano to do beautiful sprites to the game. Yep, it's a three people team. I code, draw (kind of), do game design, find music and edit sounds. My brother does game design, read through boring documentation and test everything in a light-speed fashion. It will be an amazing game, something that I search everywhere and didn't find. Something that I will play. And hopefully, something that will entertain a lot of people that love indie games!

Cheers!
Kezarus =]
 
Last edited:

Kezarus

Endless Game Maker
Hello @curato! Yes, I plan to do just that. However I don't know (yet) how can I place plot points that intertwine with the world. I will have to study some writing techniques before do that. But it's planned! =]

There will be, nonetheless, relations between factions and the players. Factions can fight among each other without the player intervention. Or even form alliances. Or fight the player. Or a complete mix of everything. There will be also events that trigger some major changes in the map.
 
P

Poddington

Guest
I like the map. The result is similar to what mine looks like after generating, well on one particular concept i keep re-visiting. I like it and seeing someone who has progressed much further than me makes me want to go back and continue developing. I'm not doing high fantasy, although I haven't settled on a theme, just the map result is really good. I never settled on a quick way to do rivers so that was where I stopped, but you've given me a burst of inspiration and a face palm that i didn't think of it. It might sound silly, but the map impresses me. Wish you all the best.
 

Kezarus

Endless Game Maker
@Poddington, wow, I'm very glad that my work inpired you! Man, let's talk about map making then. I can tell you all the things that I tried and what I actually do on Endless. I'm pretty proud of the result myself. And just 'cause you are so interested I'm going to upload NOW a video of the actual game that demonstrates the making of the map in front of the player's eyes.

Youtube link

Again, I will be glad to speak to you about the details. =]

Cheers!
 

YanBG

Member
That looks very interesting, in the video your generation passes seem pretty fast, how big is the map? Is everything drawn as tiles or there are objects(for rocks, mines etc)?
For my rpg i'm trying chunks because the world grid is too big.
 

Kezarus

Endless Game Maker
My grid, if I recall correctly, is 150x150. Not that big and I use tiles for terrain and objects for towns, mines, etc. Most are calculated inside a grid. =]

I use a mix of celular automata, flood fill and path finding. Fractals are WAY faster, but I didn't like the result, however it could fit your map needs.
 

Kezarus

Endless Game Maker
Yesterday I was talking to my brother (the other game designer) and we are VERY close to finish most tasks of Combat Module. What will be left are things like small changes on appearance and details. But the functionalities will be all there! =D

We are still hunting down bugs and we love to receive some feed back. Help us and spread the word about Endless RPG.

After the Combat Module we will focus heavily on the World Module. =]
 

Kezarus

Endless Game Maker
Working with heraldry and path finding for roads. Had to do my own A*.

Now, have to work with some graphics and how it's displayed. =]

Untitled.jpg
 

spe

Member
Very interested in this. Are these the final graphics or were you going to do something else with it eventually?

Also I think it'd be pretty cool (and easy) to add some tundra areas along the upper edge of the map. Just an idea. :)
 

Kezarus

Endless Game Maker
Very interested in this. Are these the final graphics or were you going to do something else with it eventually?
Hi spe! I'm using Kenney sprites to do buildings, but I plan to change the perspective to face front, not 3/4, and I will have come up with some original ideas too. But, the color pallete will be just like what you are seeing. If you are talking about the heraldry, yep, probably final. Maybe a new brush here and there. I got the ideas from wiki real heraldry (color and forms) and sprites from game-icons.net

Also I think it'd be pretty cool (and easy) to add some tundra areas along the upper edge of the map. Just an idea. :)
I had some some other biomes like woodlands(dry forests), plateau(dry mountains), tropical forests and they don't add that well to the map. Too much graphic complexity. But maybe I give it another shot with tundra too. Noted! =]
 

Kezarus

Endless Game Maker
Heraldry looks nice! Did you base the A* on something from these forums?
Thanks YanBG! =D

I tried to use a solution from here... didn't work out. Then I used wiki's solution... didn't turn out thaaaaaat good. Then I had to do my own tweeks and slaps in the code for accuracy and performance. It's not a master piece, but works for me (and prety fast too). I'm sending the code below, feel free to say anything about it or give any hints for improvement. =]


And this is what I came up with, it's in Alarm 1 of objRoadFinder:
Code:
///REAL PATH FIND
while( !ds_list_empty(openList) ){

    var arr, PosX, PosY, wOpen, wScore, wHeuristic;
    var arrCurrent;
    
    //FIND SMALLEST SCORE IN OPEN LIST
    var lesserScore = 1000000, lesserIndex=0;
    var lstSize = ds_list_size(pathList);
    for(var i=0; i<lstSize; i++ ){
        arr = pathList[| i];
        if( arr[PathFind.OpenClose] == true ){
            if( arr[PathFind.Score]+arr[PathFind.Heuristic] < lesserScore ){
                lesserScore = arr[PathFind.Score]+arr[PathFind.Heuristic];
                lesserIndex = i;
            }
        }
    }
    arrCurrent = pathList[| lesserIndex];
    PosX = arrCurrent[PathFind.posX]; //THIS IS THE CURRENT NODE X
    PosY = arrCurrent[PathFind.posY]; //THIS IS THE CURRENT NODE Y

    //CHECK IF ARRIVED
    if( PosXEnd == arrCurrent[PathFind.posX] ){
        if( PosYEnd == arrCurrent[PathFind.posY] ){
            if( ds_list_empty(returnList) ){
                //RECOSNTRUCT PATH ON ALARM 2
                alarm[1] = -1;
                ds_list_add(returnList, arrCurrent);
                event_perform(ev_alarm, 2);
            }
            exit;
        }
    }
    
    //REMOVE FROM OPEN LIST
    PathFindRemoveFromOpen(pathList, openList, lesserIndex);
    //ADD TO CLOSE LIST
    var Lookup = string(PosX) + "*" + string(PosY);
    ds_list_add(closeList, Lookup);
    
    //ADD NEIGHBORS
    var Neighbors;
    Neighbors[0, 0] = PosX+1; Neighbors[0, 1] = PosY+0;
    Neighbors[1, 0] = PosX-1; Neighbors[1, 1] = PosY+0;
    Neighbors[2, 0] = PosX+0; Neighbors[2, 1] = PosY+1;
    Neighbors[3, 0] = PosX+0; Neighbors[3, 1] = PosY-1;
    
    for( var i=0; i<array_height_2d(Neighbors); i++ ){
        //VERIFY BOUNDARIES
        if( Neighbors[i, 0] < 0 ){ continue; }
        if( Neighbors[i, 1] < 0 ){ continue; }
        if( Neighbors[i, 0] >= global.MapSize ){ continue; }
        if( Neighbors[i, 1] >= global.MapSize ){ continue; }
        
        //IGNORE RESOURCES
        if(global.ResourceGrid[# Neighbors[i, 0], Neighbors[i, 1]] != -1){
            continue;
        }
        
        //IGNORE OCEAN
        if(global.WorldGrid[# Neighbors[i, 0], Neighbors[i, 1]] == WorldTile.Ocean){
            continue;
        }

        //DON'T ADD IF ALREADY IN CLOSE LIST
        Lookup = string(Neighbors[i, 0]) + "*" + string(Neighbors[i, 1]);
        if( ds_list_find_index(closeList, Lookup) != -1 ){
            continue;
        }

        wScore = (arrCurrent[PathFind.Score]/1)+
            PathFindRoadScore(Neighbors[i, 0], Neighbors[i, 1], PosXEnd, PosYEnd);
        wHeuristic =
            PathFindRoadHeuristic(Neighbors[i, 0], Neighbors[i, 1], PosXEnd, PosYEnd);

        //IF NOT IN OPEN LIST
        if( ds_list_find_index(openList, Lookup) == -1 ){
            //ADD TO OPEN
            PathFindAddToOpen(pathList, openList,
                Neighbors[i, 0], Neighbors[i, 1], wScore, wHeuristic, PosX, PosY);
        }else{
            //FIND THE OPEN SCORE
            var indexer = 0;
            var lstSize = ds_list_size(pathList);
            for(var j=0; j<lstSize; j++ ){
                var wArr = pathList[| j];
                if( wArr[PathFind.OpenClose] == true ){
                    if( wArr[PathFind.posX] == Neighbors[i, 0] &&
                        wArr[PathFind.posY] == Neighbors[i, 1]
                    ){
                        indexer = j;
                    }
                }
            }
            var wArr = pathList[| indexer];
            
            //IS THIS PATH SHORTER?
            if( wArr[PathFind.Score] > wScore ){
                //SUBSTITUTE
                wArr[PathFind.Score] = wScore;
                wArr[PathFind.Heuristic] = wHeuristic;
                wArr[PathFind.LastPosX] = PosX;
                wArr[PathFind.LastPosY] = PosY;
                pathList[| indexer] = wArr;
            }


        }
    }
    
}

//AVOID ISLAND SITUATIONS
if(ds_list_empty(openList)){
    instance_destroy();
}
 

Kezarus

Endless Game Maker
Hi! Here is a new demo video about the randomly generated map! =]

Please share your thoughts. I would love some feedback!

 

YanBG

Member
Did you draw the heraldy icons(wolf heads etc)? They look great! The shields and colors could use more depth or shine/reflections. But the procedural generation is pretty good.
 

Kezarus

Endless Game Maker
Did you draw the heraldy icons(wolf heads etc)? They look great! The shields and colors could use more depth or shine/reflections. But the procedural generation is pretty good.
Hi @YanBG, I did some reflections on the heraldry. What do you think? =]Untitled.png
 

YanBG

Member
Yeah looks better. Why do you make the symbols in similar color as the background? They stand out less that way. In addition to the reflection, add shading to the side, to make it look more curved like a shield:

Not sure about the black outline either. You could use gray metalic color or make it thicker on one side, to look like there is angled depth.

Some more references.

Btw how do you change the colors, with a shader?
 

Kezarus

Endless Game Maker
Hmmmm. I used a soft gradient from the middle to the borders to do that effect. I tried do paint it half darker, half light and it doesn't work out so good.

Maybe I could add a riveted border above all and try the half dark again.

I'm using just image_blend and black and white sprites. =]
 

Kezarus

Endless Game Maker
Yep, just did that. The riveted border will be a lot o chngaes on code to do. But I changed the gradient to a half darker pattern.
TEST.png

You can also download the game here if you like. The combat system is pretty much complete. =]
 

YanBG

Member
And this is what I came up with, it's in Alarm 1 of objRoadFinder:
I wanted to finish checking several A* tutorials before answering you. But here is my issue: the build-in mp_grid lags when there are too many cells/larger world(less than ~200x200 is fine) and multiple characters. I'm thinking the A* would do the same, maybe a bit more optimized but still.
So i'd have to pathfind only a smaller radius around the enemies(they'll lose aggro), but there are mazes too. I wonder how older games like DIablo 2 did it without lag.

Did you base it on Breadth-first or Dijkstra?
 

Kezarus

Endless Game Maker
Old games probably did like you did. Small aggro radius. I noticed that heuristics is a LOT important too. And, sometimes, when the path gets too complicated (more than 100 open nodes), I cut it short and start a new path when it arrives at half of the way.

I used A* and Dijkstra. Most of the code is from the wiki. The issue with Game Maker lists is that they aren't that good to fast locate a node, so I had to use some techniques to improve that.

Well, here is all my pathfind code. I hope it easy things up for others. And, if anyone sees room for improvement please tell me here. =]

PathFindTroop( X Ini, Y Ini, X End, Y End )
Code:
///PathFindTroop( X Ini, Y Ini, X End, Y End )

//LIST CREATE
var pathList = ds_list_create();  //the most important
var fullList = ds_list_create();  //to trace back
var openList = ds_list_create();  //as fast finders
var closeList = ds_list_create(); //as fast finders

//JUST A START
var Retorno = "";
var PosX = clamp(argument0 div TileSize, 0, global.MapSize);
var PosY = clamp(argument1 div TileSize, 0, global.MapSize);
var PosXEnd = clamp(argument2 div TileSize, 0, global.MapSize); //target x
var PosYEnd = clamp(argument3 div TileSize, 0, global.MapSize); //target y

var Score = PathFindTroopScore(PosX, PosY);
var Heuristic = PathFindTroopHeuristic(PosX, PosY, PosXEnd, PosYEnd);
var Stop = false;

//BEE LINE IF WATER
var FinalPlace = global.WorldGrid[# PosXEnd, PosYEnd];
if( FinalPlace == WorldTile.Ocean || FinalPlace == WorldTile.Shallow ){
    Retorno = string(PosXEnd)+"*"+string(PosYEnd)+"|" + string(PosX)+"*"+string(PosY)+"|";
    return Retorno;
}

//ADD TO OPEN
PathFindAddToOpen( pathList, openList, fullList, PosX, PosY, Score, Heuristic, -1, -1 );

//REAL PATH FIND
while( !ds_list_empty(openList) ){

    var arr, wScore, wHeuristic;
    var arrCurrent;
  
    //FIND SMALLEST SCORE IN OPEN LIST
    var lesserScore = 1000000, lesserIndex=0;
    var lstSize = ds_list_size(pathList);

    for(var i=0; i<lstSize; i++ ){
        arr = pathList[| i];
        if( arr[PathFind.Score]+arr[PathFind.Heuristic] < lesserScore ){
            lesserScore = arr[PathFind.Score]+arr[PathFind.Heuristic];
            lesserIndex = i;
        }
    }
    arrCurrent = pathList[| lesserIndex];
    PosX = arrCurrent[PathFind.posX]; //THIS IS THE CURRENT NODE X
    PosY = arrCurrent[PathFind.posY]; //THIS IS THE CURRENT NODE Y

    //TOO MANY OPEN NODES, CUT IT SHORT!
    if(lstSize > 100){
    //if(lstSize > 150){
        Stop = true;
    }
  
    //CHECK IF ARRIVED OR STOP
    if( PosXEnd == arrCurrent[PathFind.posX] || Stop ){
        if( PosYEnd == arrCurrent[PathFind.posY] || Stop ){
            var wLastPosX = arrCurrent[PathFind.posX];
            var wLastPosY = arrCurrent[PathFind.posY];
            Retorno += string(wLastPosX)+"*"+string(wLastPosY)+"|";
            var StopReturnX = wLastPosX;
            var StopReturnY = wLastPosY;

            //RECOSNTRUCT PATH TO RETURN
            while(true){
                //FIND THE PATH
                var indexer = -1;
                var lstSize = ds_list_size(fullList);

                for(var j=lstSize-1; j>=0 && indexer==-1; j--){
                    var wArr = fullList[| j];
                    if( wArr[PathFind.posX] == wLastPosX &&
                        wArr[PathFind.posY] == wLastPosY
                    ){
                        indexer = j;
                    }
                }
                arrCurrent = fullList[| indexer];
              
                wLastPosX = arrCurrent[PathFind.LastPosX];
                wLastPosY = arrCurrent[PathFind.LastPosY];
              
                //RETURN ON LAST NODE
                if( wLastPosX == -1 && wLastPosY == -1 ){
                    //DESTROY LISTS
                    ds_list_destroy(pathList);
                    ds_list_destroy(fullList);
                    ds_list_destroy(openList);
                    ds_list_destroy(closeList);
                  
                    //RETURN
                    return Retorno;
                    /*if( Stop ){ //NOT REALLY AT THE END
                        return
                            PathFindTroop(
                                StopReturnX*TileSize,
                                StopReturnY*TileSize,
                                PosXEnd*TileSize,
                                PosYEnd*TileSize)
                            + Retorno;
                    }else{
                        return Retorno;
                    }*/
                }else{
                    Retorno += string(wLastPosX)+"*"+string(wLastPosY)+"|";
                }
            }
        }
    }
  
    //REMOVE FROM OPEN LIST
    PathFindRemoveFromOpen(pathList, openList, lesserIndex);
    //ADD TO CLOSE LIST
    var Lookup = string(PosX) + "*" + string(PosY);
    ds_list_add(closeList, Lookup);
  
    //ADD NEIGHBORS
    var Neighbors;
    Neighbors[0, 0] = PosX+1; Neighbors[0, 1] = PosY+0;
    Neighbors[1, 0] = PosX-1; Neighbors[1, 1] = PosY+0;
    Neighbors[2, 0] = PosX+0; Neighbors[2, 1] = PosY+1;
    Neighbors[3, 0] = PosX+0; Neighbors[3, 1] = PosY-1;
  
    for( var i=0; i<array_height_2d(Neighbors); i++ ){
        //VERIFY BOUNDARIES
        if( Neighbors[i, 0] < 0 ){ continue; }
        if( Neighbors[i, 1] < 0 ){ continue; }
        if( Neighbors[i, 0] >= global.MapSize ){ continue; }
        if( Neighbors[i, 1] >= global.MapSize ){ continue; }
      
        //DON'T ADD IF ALREADY IN CLOSE LIST
        Lookup = string(Neighbors[i, 0]) + "*" + string(Neighbors[i, 1]);
        if( ds_list_find_index(closeList, Lookup) != -1 ){
            continue;
        }

        wScore = arrCurrent[PathFind.Score]+
            PathFindTroopScore(Neighbors[i, 0], Neighbors[i, 1]);
        wHeuristic =
            PathFindTroopHeuristic(Neighbors[i, 0], Neighbors[i, 1], PosXEnd, PosYEnd);

        //IF NOT IN OPEN LIST
        if( ds_list_find_index(openList, Lookup) == -1 ){
            //ADD TO OPEN
            PathFindAddToOpen(pathList, openList, fullList,
                Neighbors[i, 0], Neighbors[i, 1], wScore, wHeuristic, PosX, PosY);
        }else{
            //FIND THE OPEN SCORE
            var indexer = -1;
            var lstSize = ds_list_size(pathList);

            for(var j=lstSize-1; j>=0 && indexer==-1; j--){
                var wArr = pathList[| j];
                if( wArr[PathFind.posX] == Neighbors[i, 0] &&
                    wArr[PathFind.posY] == Neighbors[i, 1]
                ){
                    indexer = j;
                }
            }
            var wArr = pathList[| indexer];
          
            //IS THIS PATH SHORTER?
            if( wArr[PathFind.Score] > wScore ){
                //SUBSTITUTE
//show_debug_message("SUBSTITUTE " + string(wScore) );
                wArr[PathFind.Score] = wScore;
                wArr[PathFind.Heuristic] = wHeuristic;
                wArr[PathFind.LastPosX] = PosX;
                wArr[PathFind.LastPosY] = PosY;
                pathList[| indexer] = wArr;
            }
        }
    }
}

PathFindAddToOpen( pathList, openList, fullList, PosX, PosY, Score, Heuristic, LastPosX, LastPosY )
Code:
///PathFindAddToOpen( pathList, openList, fullList, PosX, PosY, Score, Heuristic, LastPosX, LastPosY )

var pathList = argument0;
var auxList = argument1;
var fullList = argument2;
var PosX = argument3;
var PosY = argument4;
var Score = argument5;
var Heuristic = argument6;
var LastPosX = argument7;
var LastPosY = argument8;

var Lookup = string(PosX) + "*" + string(PosY);

ds_list_add( auxList, Lookup );
ds_list_add( pathList,
    array_ini(PosX, PosY, Score, Heuristic, LastPosX, LastPosY) );
ds_list_add( fullList,
    array_ini(PosX, PosY, Score, Heuristic, LastPosX, LastPosY) );

PathFindTroopScore( PosX, PosY )
Code:
///PathFindTroopScore( PosX, PosY )
var PosX = argument0;
var PosY = argument1;
var Score = 10;
var SquareSpeed = global.MoveGrid[# PosX, PosY];

//COST SCORE BLOCK
if( SquareSpeed > 1 ){ //PREFER ROADS OR EASY WAYS
    Score = (2 - SquareSpeed)*0.65; //MOVE COST
}else
if( SquareSpeed >= 0.5 ){ //NORMAL
    Score = (2 - SquareSpeed)*1.5; //MOVE COST
}else{//HIGH COST FOR VERY SLOW
    Score = (2 - SquareSpeed)*3; //MOVE COST
}

//Score = (2 - SquareSpeed)*1.5;

return Score;

PathFindTroopHeuristic( PosX, PosY, PosXEnd, PosYEnd )
Code:
///PathFindTroopHeuristic( PosX, PosY, PosXEnd, PosYEnd )
var PosX = argument0;
var PosY = argument1;
var PosXEnd = argument2;
var PosYEnd = argument3;
var Heuristic = 0;

//HEURISTIC
Heuristic = point_distance(PosX, PosY, PosXEnd, PosYEnd)*1.0;

return Heuristic;

Inside of objPeople (or something that you want to move), on the Step Event
Code:
///MOVE
if( !ds_list_empty(lstPath) ){
    if( global.Paused ){
        speed = 0;
    }else{
        var SquareSpeed = global.MoveGrid[# x div TileSize, y div TileSize];
        MoveSpeed = BaseMoveSpeed * SquareSpeed;
  
        //TOO CLOSE TO DESTINATION
        if( point_distance(x,y,MoveTargetX, MoveTargetY) <= MoveSpeed ){
            ds_list_delete( lstPath, 0 ); //CLEAR NODE
          
            if( !ds_list_empty(lstPath) ){ //IF NOT EMPTY
                var arr = lstPath[| 0]; //INIT VARS
                MoveTargetX = arr[0];
                MoveTargetY = arr[1];
            }else{
                speed = 0;
            }
        }else{
            move_towards_point( MoveTargetX, MoveTargetY, MoveSpeed );
        }
    }
}
 

YanBG

Member
The issue with Game Maker lists is that they aren't that good to fast locate a node, so I had to use some techniques to improve that.
Do you mean a separate list with the neighbours for each node? Because that's how i have it right now as substitute for vectors. The nodes are in 2d array with values for x,y,parent,ostacle,visited.
Well, here is all my pathfind code. I hope it easy things up for others. And, if anyone sees room for improvement please tell me here. =]
Tbh for me is a bit difficult to read without the GM colors.
 

Kezarus

Endless Game Maker
(I am not dead... yet!)

Last months were pretty busy. Most of the sprites on combat are already done, thanks to @Nikky Oryzano.

The living world is running good. The initial steps to start a new game (with no debug needed) is completed.

Shops, training skills and recruit new chars are set and ready.

The very start of the game is a little bit too difficult for my taste. We are improving that and then a real good Alpha will be released! =D

Stay tuned. ;):D
 

Kezarus

Endless Game Maker
Yeah i was wondering where are you lol

So, did i ask that...have you started the marketing campaign?
Hi Yan! Sorry for the delay. I was changing areas at my job and doing a lot of stuff on the game.

About the marketing... that's a no. =] I think I need to do lot more on the game to make it good for shipping. But if you happen to know someway good to market the game I would appreciate the advice. =D
 

YanBG

Member
Not really, i'm underdeveloped on that(don't build a twitter following etc). I tried contacting publishers to help me out with QA, design and even coding(they have teams) but it seems they want a nearly finished game and with better graphics. Also if it's for the grand strategy genre, might prefer a more historically accurate game.

This looks awesome! I've tried doing random generation multiple times, but can't seem to get anywhere with it. Keep up the great work.
For terrain, i'm using perlin. Split into provinces with voronoi.
 

Kezarus

Endless Game Maker
Hello there, beautiful people! I am planning to do a properly alpha release, but I have a METRIC TON of changes for you guys.
So, I am posting a download here: Download. Don't forget to send a feedback!

There is so many things done here that it's hard to enumerate. But this is a short description:
  • Combat is finished! For now on, just some balancing and little improvements;
  • Living World is finished! Towns grow, as Evil Centers too. They generate troops and merchants travel the land avoiding bandits;
  • Seasons! Dynamic Weather! World Calendar!
  • Lots of new sprites by Nikky Oryzano!
  • Town Shops! Buy stuff! Train Skills and Attributes!
  • End of Combat! Loot!
  • Simple Quests!
We are moving towards the end of it all! Sorry for the lack of updates. I will try update the 1st post to reflect what is done.

If you can, send your feed back. I assure you that I will reply to that. Your opinion is very important to this game in the making!

Cheers!
Kezarus
 

Kezarus

Endless Game Maker
Hmmm, I think you have old save games. Can you delete the files? Should I place a fail safe there? Hmmm.
 

YanBG

Member
Yeah, i deleted the old folder in local and worked.
You should add because of GM's sandboxing and most people don't know where to look for the saves.

1) Did i tell you to add default party?
2) Not a huge fan of the visible terrain creation. You might hide it in the final version.
3) When i take delivery quest, gray it out from the available ones. Also why can't a town give both delivery and bounty at the same time?
4) Fix the info/tooltip on the inventory cell not the mouse, now it slides around too much.
5) Are you going to add fast travel?
6) When opened and closed the menu, i couldn't move the party on the world map. Save and load fixed it.
7) It's a bit difficult to click on the towns and open their menu.
 
Last edited:

Kezarus

Endless Game Maker
Yey! Thanks for the reply! =D

I will address the save games and check if they are valid or not. This is just happening 'cause it have more variables than before. It will not happen on the final release. Hmmm.

1) Ok, good! It is possible, but are creating a party not easy enough?
2) Really? What can I do better on that? Some people liked the generation.
3) Amazing, will do the gray out. About the number, there will be only one quest at a time by design. Like Battle Brothers, not like Skyrim. =]
4) I didn't quite get what are you saying there. Can you explain it differently?
5) Nopz. The fun is in going from place to place. Do you think it takes too long now?
6) Hmmm, nice. Gonna squash that bug.
7) Ooooook, will expand the bbox. =] Will it fix it or do you have something else in mind?

Dude, amazing feedback. Thank you so much. I would like to ask you other questions too:

8) Combat, are the minigames good enough? Is the flow good?
9) Skills and progression? XP gain? Share your thoughts =]
10) Weapons and Armors are clear and good?
11) Are customization of hair and features nice? And races (graphic wise)?
12) Did you chase the Loners? The black dressed people on the map.
13) Did you saw an Evil Center? Are they clear? Did you destroyed one?
14) Is the game too difficult?

Cheers!
Kezarus
 

CMAllen

Member
Hmmm, I think you have old save games. Can you delete the files? Should I place a fail safe there? Hmmm.
Just a suggestion, but it's a good habit to get into -- make sure your save files have some sort of versioning method to them, so that your game can know what file format to expect and how to load older file versions, restructuring the data and updating it to the newest one. This is how all AAA projects do it. It's not a 'huge deal' for a game that's still in development, but if you intend to continue to build and expand on your project after it's initially finished, it would be unwise, shall we say, to throw away your users' progress with each update.
 

YanBG

Member
I will address the save games and check if they are valid or not. This is just happening 'cause it have more variables than before. It will not happen on the final release. Hmmm.
Gotcha, but you might have patches after release too, no?

1) True, 4 clicks but there might be more stats later? Not a big deal, just some of the stuff people expect nowadays.
2) Oh i mean more like a loading screen instead? Some players think games are better when most of the systems are hidden. But it could just personal opinion.
3) Sure, i wouldn't make it too much like Battle Brothers, people would get to compare them and that 1 quest thing i didn't like in BB. I mean letter(errant boy)/delivery is not like a contract, right?
4) The tooltip position follows the exact mouse position, make it clamped at each cell, so while the mouse moves inside the same cell the text stays at the same place.
5) Well, it's needed for the testing at least, like a cheat.
7) What if there is enemy party at the spot too? Which has priority?
8) Started my 1st combat, it felt kind of slow, with very few and small icons/buttons on my pc screen(you shouldn't have a mobile feel if you target Steam). The characters were too big on the other hand. And i couldn't attack with the first guy who had a staff, his action points were only enough to walk to the enemy? Is there autocombat like in Heroes 3?
10/11) I like them, crafting and resources look cool too. There is no interaction with the mines etc objects on the world map?
World map terrain and party icon graphics need improving.

Sorry i played i few minutes, that's why my feedback stopped there. Will check the other questions for the next time though.

# Also there is no escape/close button during battle and town interaction.
You could make the music to stop at sometimes too, play only if enemies approach?

The game is very interesting and i'll keep an eye on the progress!
 
Last edited:

Kezarus

Endless Game Maker
Gotcha, but you might have patches after release too, no?
Most probably yes, but the error happend because I added new variables that didn't exist in the past. I will not add anything else to the save (not in the way I did, for the matter). =]

1) Yep, Default Party on the Backlog;
2) So, the New Game generates the map before your eyes. The Load function is fast and don't display the world creation again;
3) I think it is a design decision. On Skyrim I had too much to keep track of. BB have just one and it was good for me. Endless will have some other plot lines that will show, like a parallel quest. But the Town Quest will be one at a time;
4) Hmm, fixed position tooltip in relation to the Item. Ok, the function that I made already supports this, gonna place that on the Backlog too. Should I do that for Skill buttons too? It's the same function; =]
5) Never felt the need for that. Hmmm, are you using the speed up? You can double the game speed by hitting the 2 key;
7) The enemy is the priority;
10/11) We though on placing a gather function on ores, groves, etc. But then we cancelled all that. But you can query map objects with right-click. All structures and minerals will be redone by Oryzano; =]

you shouldn't have a mobile feel if you target Steam
Ouch, hahaha. You mean the attack buttons? That became tiny when I changed my monitor. I am thinking of a solution... but nothing came to mind so far. Any ideas?

The first round is to close in. You can't attack now, but later you can get a Skill to move far away and do a Swift Attack.

Auto combat IS possible, but I don't think it will be a desireable feature. I would hate that for BB or XCom.

So! During battle there is the first button on the left that is Flee. There is no penalty for fleeing combat. But in Town... yes, I need to put a button there. Wops. =]

You could make the music to stop at sometimes too, play only if enemies approach?
I have a music box with 5 musics for combat and 5 for World. The deploy there have only 1 each just for the sake of space and simplicity. Maybe more musics helps?

The game is very interesting and i'll keep an eye on the progress!
Thanks a lot for the feedback, man! Appreciate that. So many valuable infos on wht you said. Gonna try to update here more often. If you have more considerations please make them. I will try to address each one.

The game is not final, but the features that it have, have to be solid and good. We will still do kind of a dynamic story, plots and villans. Interest Points will be done to. Maybe dungeons (we don't know yet).

What do you think will add more to the game? =]


Cheers!
Kezarus
 

YanBG

Member
4) Hmm, fixed position tooltip in relation to the Item. Ok, the function that I made already supports this, gonna place that on the Backlog too. Should I do that for Skill buttons too? It's the same function; =]
Yeah, probably all like that.
5) Never felt the need for that. Hmmm, are you using the speed up? You can double the game speed by hitting the 2 key;
I did notice it, add x4 too? Btw BB has ports too, where you can pay for fast travel.
Ouch, hahaha. You mean the attack buttons? That became tiny when I changed my monitor. I am thinking of a solution... but nothing came to mind so far. Any ideas?
You can scale them up with the window size.
So! During battle there is the first button on the left that is Flee. There is no penalty for fleeing combat. But in Town... yes, I need to put a button there. Wops. =]
I used flee, but it's not instant and you have to wait for the enemy turn?
 

Kezarus

Endless Game Maker
I did notice it, add x4 too? Btw BB has ports too, where you can pay for fast travel.
Yeah... I tried, but without V-synch the game looks like garbage. And the speed is bounded to room_speed.

You can scale them up with the window size.
I can double the size, but I don't know how it's going to perform on 1000x700. Will have to try.
Our benchmark is the good olde Battle Brothers. Their buttons are tiny, but that is no excuse... gonna experiment on size anyway.


Thanks again!
Kezarus
 

Kezarus

Endless Game Maker
There is a new version up!

@YanBG I did some of the things that you advise me. I will do the default party yet. The buttons got a little bit too gigantic in my opinion. What do you think? Maybe grow from 50%(original) to about 75%? I did 100% on this version.

If it's interesting to anyone, I am making my dev diary avaliable down below. It's mostly in english, but some parts are in portuguese.
DEV DIARY
 

YanBG

Member
You got a screenshot? Maybe scale if as a percentage? 1920x1080 is x2 from 960x540

Btw idon't use different objects for GUI, but draw at specific coordinates part of a menu background.
 

Kezarus

Endless Game Maker
I finished all the 13 Black Magics on the weekend. Sound, animation, effects, everything.

Yesterday I did a BIG brain storm with my brother about Interest Points (locations to visit on the map) and Big History Plots (End of the World, End of Magic, kind of brainstorm).

But I am still not happy about it. I want chars that you can interact with and interact with each other. Still thinking.
 

Kezarus

Endless Game Maker
Made some finishing touchs in the game in the past days. Everything is working fine, main concern now is the quest system and player interaction.

Should I do a video about the current state of the game? =]
 

Kezarus

Endless Game Maker
Hi everyone! I did some changes to the original post to reflect the actual state of the game.

I think most of it is completed and we have just the dynamic and big quests left to do.

I would really like your opinion about the game. Download it and share your thoughts! =]
 
Top