Forgiveness, an handmade multiplayer game

I'm working to the engine since september, (of course just pure C++ from scratch as the handmade manifesto commands) averaging something like 25 hours/week. (I'm also having a full-time internship as software developer in the meanwhile).

Yesterday I've ultimately decided that I will NOT leave my day job (they offered my a contract and I said I need time to think about it, but today I've decided I will accept), it would have been too risky and I would have been putted under real time/economic pressure.
So my goal is to dedicate to the project 15 to 20 hours/week: This way I'll have all the time to do things well without any hurry, but I will also have enaugh time to make tangible progress on a month basis.


But let me spend a couple of words about the game:

The main goal of the project is of course to learn, possibily having fun while doing it, and who knows, maybe one day shipping it on steam, or launching a kickstarter campaign, or whatever. In the worst case having developed a game like this will surely put me in a good spot to obtain a job in the game industry.

I'm trying to bring togheter all the elements that I like from various RPG/survival: I've loved games like diablo, don't starve, older amiga doungeon crawler (eye of the beholder, black crypt, ecc), morrowind, minecraft, final fantasy, the witcher: all of those games have some aspects that I would like
to reproduce in my game, but I also have many new ideas to throw into the mix.

I want the game to have a very nice looting and levelling system, but I also want the player to feel powerless in an enourmous world, pretty much like minecraft or don't starve do.
I would say that at the moment things are going pretty well, I already have a theoretical infinite number of player walking and slaying enemies in a theoretical giant, toroidal world: there will not be "boundaries" in the explorable universe: the player will be able to walk straight from one end of the world to another, and we are talking about a tile-based game, so it's a huge distance to cover. That thing for me is a big plus, I don't like those mmos where you have limited areas to walk, or anything like that.

Features that I would like in the game are:

-classic attribute and levelling system (diablo 2 rulez if you are interested).
-pretty simple and intuitive combat system.
-absolutely no transitions between one part of the world and another.
-deep crafting mechanics (equipment, potions, survival objects, gems to put on equipment, ecc).
-ability trees without ANY restriction: every player will be able to develop his character however he wants.
-"alive" world with as much fauna and flora as I can slam into the game.
-different biomes of course, with particular enemies, animals, buildings, wheater conditions ecc for any of them.
-doungeons with some boss fights eventually (more on this in future posts).
-mini-quest and side events, I think The witcher 3 does a pretty good job at this. (treause maps, secret passages, traveling merchants, but also mini-quest like "bring me 190 of those and I will give you this awesome sword)
-absolutely minimal UI, without those 193 buttons and HUDS that at the moment all MMO have, I think they are really really bad.
-free-to-play, and in the case of having a sufficient amount of players, monetize on that ASBOLUTELY WITHOUT transforming the game in a pay-to-win. (no shoppable items, no quest pass for limited time or anything like that)(I already have an idea on how could it be possibile)


Features that I don't know if I want, but that I would like to have some thougts on:

-I don't know if I want a "main quest": I mean, of course I have plans to make the player interested in keep playing the game, and I already know how the game will "begin" and "end", but how to structure and contestualize it in a gigantic world?
-I think that there are some players that are interested in pure RPG games, and some players interested in pure survival games: I would like to have ways of making both of those categories interested in my games.
For example: some RPG players could get annoyed if they needs to eat and drink, how can I alleviate those problems?
-should the game allow player housing? (like don't starve for example) I mean, probably there will be SOME player housing, but how much and why?
-I don't know exactly how much I want some things to be "realistic": is the inventory limited? really if you don't drink water for 20 hours you die?

I should also say that I want my game to be playable from mobile, but that is something that will come later, and will probably be a commercial reason: the mobile market for MMO is just ridicoulus. (zenonia S is in the top 3 I think... lol)
It's also for that reason that I will spend a good amount of time figuring out a good UI and a good commands schema.

Of course, as soon as I have a decent prototype to show I will post about it :)

I'm sorry for not having a good video about the game, my initial plan was to open this thread and start talking about the game only when I would have at least a complete prototype to show, but today I've decided to keep working full-time, and that was a BIG and very difficult decision for me.

My goal is to update this thread every 2-3 weeks at least, but the project is long-term, so don't expect awesome progress from one month to another.
(This also mean that I will have much more time figuring out if I'm doing well, and what the comunity think).

Oh, I'm leaving here two concepts, so you can have a very early impression on the style I want for the game. The first will be an enemy, the second one a playable "race" or something like that.(my artist is pretty awesome, I know :D )






Edited by erpeo93 on
Sorry for the double post, but I absolutely want to thank the community for the inspiration and the resources that it's giving me, and putting it togheter with the project description was absolutely not fair.

Without handmade hero and the handmade network probably at the moment I would be screaming again a crap library or a build tool, and this game would have remained just a dream.

At the moment I can't give back much at all to the community(I don't have enough skills/experience to do so), but hopefully one day I will be able to give the community something other than a simple "thanks", at least in some fields.

Again, wish all the best for you guys.
The playable character looks great! I'm excited for future updates on your project. :)
The playable character looks great! I'm excited for future updates on your project. :)

Edited by Rayalan Kenyon on
Finally I've finished doing the most low level stuff of the network architecture for the engine. (Of course it's just a "first pass", not the definitive, performant, efficient one)
As I said in the first post, I now have a "big as I want" toroidal universe, splitted in many "pieces" that can be handled on different servers.
The cool thing is that the player hasn't the minimum perception going from one to another, so there will not be loading screens in the final game.
I've even implemented teleporting from one arbitrary location to another, wherever it is, so that bring me one step toward "doungeons": they will simply be other "chunks of universe", but of course they will be separate from the standard ones. The teleport feature already allows me to instantly "flash" a player from one universe chunk to another.

And that's it, I will start working on the rendender tomorrow, I hope to have a decent skeletal animation system in a decent amount of time.
Of course the game isn't ready to be shown yet, but I'll do so as soon as I can.

Leonardo
Last month has been totally dedicated to cleaning the network code and writing down the render.
Last week I decided to start writing a basic skeletal animation system, thinking in my head "well I've never done it before, so it's going to take a while".

But after a couple of hours of coding I realised that I already had a basic working system written down, and I was the happier person of the world: it was the first time that I tackled a relatively complicated problem and managed to get it with the compression-oriented programming techniques with a decent velocity in the process, and in that moment I was like "yeah man, this is the way to program, heavens to Casey".

So I'm very excited about how the things are going right now, and I think that in 3-4 months at max I will have a basic gameplay video to show.

Of course, Casey has teached me everything I know about compression-oriented programming, so this has been possible only because he decided to make handmade hero, every episode of the series is just gold in my opinion.

This could also be the occasion for me to start give a small contribute to the community, maybe with a skeletal_animation_2D.h library and an explanation thread where I explain how I arrived to what I have now.
Of course the system is not ready to be "libraryzed", but I will do everything I can to make that possibile and start giving back something useful to the handmade community.

Leonardo

Today is the last day I work full time for my company.

Considering how well it's going the development of my game, and considering how far away the job was from my "ideal" job, (and of course considering that I've enough money to survive long enough) I've decided to dedicate myself to my game full-time for at least one year, and see how it goes.
Yeah, it's pretty risky, but what can I say, I just love too much making games: the worst case scenario is that I will end up with a crappy mmo that nobody wants, but then I will have much more opportunities to break in the game industry.
Considering this, expect much more action (and a demo video of course) from me in the months to come. :)




Regarding the game, My servers are already able to handle hundreds of players. (I implemented a way for the client to spawn other clients basically) Furthermore all of those players are at a world boundaries, so the servers have to constantly send updates one another of all the players.
Furthermore, is all running on one pc, 2 servers and a client, and it's even in debug mode. And the server is single threaded, so I think I'm already in the position of handling a thousand of player for world cuncurrently.
For the final user, There isn't ANY sign of moving from one server to another, I mean, no screens, no flashing, no nothing.
You just move from one server to another without knowing it.
I don't know if there are games that can do that, but it's pretty amazing I have to admit. Totally satisfied with that.

Worked also on the animatiion system quite a bit, now I'm at a point were I could hire an animator if I would like to do so, I can load an arbitrary file produced by spriter and put that straight in the game, with interpolation between frames, scale, and other small nice things.

I'm pretty satisfied with the current state of the game, I'm currently trying to multithread the server in this way:
-one thread that receive updates from both clients and other servers, and modify the world accordingly
-one thread that "coordinates" the server's worlds simulation, deciding step by step which region to update.
-one thread that do SQL asyncronous stuff (insert, update, and delete)
-many thread that simulate regions, sending the corresponding clients updates when necessary.


Regarding the dbms, I'm currently using mysql, but I guess that it doesn't allow what I'm trying to do here.
Let's say a player is going out of a world: of course the thread that is responsible of updating that region would like to do something like

1
PushOnSQLQueue("delete playerName from table player");


The sql thread of course will execute the query, effectively calling the mysql api.
But as far as I can tell, there isn't a way of doing that in a non-blocking way with vanilla mysql.

One thing that (I think) I could do is just open a sql transaction, and maybe commit the transaction every tot MS or something like that.
But I'm not thrilled with that, I would prefere a dbms that allows non-blocking insert, update and deletes. There is one?


Edited by erpeo93 on
Another month has passed, and yet the game isn't ready to be shown.

I've been working on the network security side, setting up a secure SSL connection for the initial login, and then using a seed for both sending and receiving, so that no attacker can predict packets number and spoof.

Also, I've started working on the artificial intelligence for the game, which is basically as simple as evaluating every possible action that you can do and picking one of the best.
About this topic, the book that I've followed to implement the system is behavioral mathematics for game AI, by Dave Mark.

I've also put some world generation up and running, now I have "islands" at least (thank you Ken Perlin), and also the environment entities (trees, rocks ecc) can be placed following noise maps.









(the purple rectangles you see are for testing purpuse at the moment)


I've also been working on the website for the game, which is in a good state at the moment... http://www.forgivenessthegame.com/
(it's all testing at the moment, but if you visit the site, every critics is welcome of course, the website is under construction anyway).

And that's all I guess.
Unfortunately I'm not confident in showing the game yet, but surely that moment will arrive soon. :)


edit: I've forgotten to mention that I've done all the sql janky stuff, and the queries are done in a separate thread, so that there is basically no performance cost.

Edited by erpeo93 on
Well, after a couple of months of delay, I can finally show you a small video of the game.
The video is on the debug system of the game, and it's fundamental features: (nothing particularly exciting, it's true)

-edit server variables in real time from the client
-constantly record input and replay it on demand
-possibility to pause the simulation, and proceed one step at a time
-possibility to edit entity attributes, also while replaying input, and keep the state saved
-possibility to spawn or delete entities on demand, with live preview.
-possibility to place "check-points", so that if for example I'm replaying a sequence of 20 seconds, I can place a checkpoint after 10 seconds: now I can't touch the first ten seconds, but I can do variuos, different "test" with the last part, and when I remove the checkpoint, I will get back to the beginning of the sequence, with the first ten seconds unmodified.

The "basics" of the UI and the debug system are coded along with handmade hero, and after finishing the part about the debug system I started implementing the features I wanted on top of that.



The work on the engine is pretty much finished, I want to take a couple of weeks to clean up the codebase, and then I will start the gameplay coding.

Leonardo