Pre-alpha Technical Outline

From Citywars Savage
Revision as of 22:02, 5 December 2019 by Cws 01studio (talk | contribs) (→‎Rpg)
Jump to navigation Jump to search

Lua error: Cannot create process: proc_open(/dev/null): failed to open stream: Operation not permitted

Introduction

Game Pitch

Citywars Savage Logo

Citywars Savage is a fast paced sandbox indie mmorpg. To progress in the game you have to build and expand your city. These can be built alone, with your friends or even with massive clans. The whole server is a gigantic centralised modding platform where the community can edit and change absolutely everything from the game. Worlds, Gamemodes, Weapons, Quests, Filters, Musics, Behaviors and Npcs are all editable from inside the game. One of our most unique features is our visual scripting system where players can program their own npcs to help progress their city.

State of the game

caption

At our current stage (pre-alpha #068) the game doesn't offer a lot of gameplay. We have approximately 20 minutes of gameplay. All the other parts of gameplay are scattered in every corner of the game without anything properly connecting them to the main gameplay. Waiting to be assembled. Some are broken, some are in development, others are functional but simply forgotten.

Our plan to launch the game in the end of December is not to offer a game to be played but a platform to build and help us in developing the game. We concentrated all our efforts into these last 3 years to create all the necessary tools inside the game to create the engine itself, allowing us to train and teach our community into helping us creating content for the game.

Since we are only a small team of 2 developers creating the game, we will never be able to create enough content for the type of project we aim. We plan to slowly launch the game with a really small amount of people that we will teach how to use the game to create content with us. From there, we will build together the game itself with our community slowly growing until one day there is enough content for "regular type" of player to simply play our game like any normal game.

It's a really weird concept but it's a concept we became experts to operate with our previous project called Citywars Minecraft which was a commercial Minecraft server. Players these days want more than a simple game. They are bored of generic games releases and are searching for more. By allowing the community to help create the game itself our community become personally attached to the game. They make friends, express their creativity, share their creations and develop their social skills. Our unique type of game has a higher percentage of engagement compared to any other kind of game on the market.

So keep in mind this is not an "Early Access" release. It's more like an "alpha development kit tool".

Name of the game

Citywars Savage.

Why such an aggressive name for such a casual and cute little game. Well in 2019, people tend to forget this, but the Internet is a difficult place to be. The internet is filled with trolls, hackers, scammers and untrustworthy people. And to be honest we embrace this chaos. Because it's part of the internet and this place is also home to the most beautiful things in this world. So much knowledge and so many interesting people. The internet is Savage. Plus most of the time these "untrustworthy" act tough behind their screen, but they are are only waiting for a good opportunity to open and share their big hearts to the right community. They need a place to feel accepted and at home with their friends. That's why the game has such an aggressive name. Like it's player base. It acts rough but in reality it super friendly. This is to honor the reality of the internet.

Can we change the name? Yes... We would prefer to keep it that way, especially the "Citywars" but yes we understand that in marketing every detail count and that the name is not perfect to represent the core gameplay of the game. If you come to us with a good idea we will change it.

Game Visual

Assets are exchangeable at anytime easily. Every assets are simply listed together from a database and can be replaced by a new one with a single drag and drop. This was meant to make the game easily replaceable in case we decide to change the game artistic direction. Which is perfect in the eventuality you want to implement your own IP. Everything in the game is built modular and can be easily exchanged.


Investment

Since the game is self-funded, every dollar spent is carefully calculated and trying at all costs to reduce and minimize investment for the development of the game. This is why we use strategies like public assets to build the game. The result is we successfully funded the development of our game without any debt or investors until now. We are only 2 developers working on the game and owning 100% of it. We worked extremely hard to achieve this and we are really proud of this. Most of the time we try to explain the small development budget, but people have trouble understanding how small. Like incredibly small. The studio doesn't have any employes. We transformed the basement of our apartment in studio. We work from home and live together to minimize at maximum the costs of development.

We know the indie gaming market is highly volatile these days and many many projects fail due to the quantity of game released every day. These days it's not enough to have a beautiful game, you need an exceptional game and you might still fail your project. We want to avoid these pitfalls. By minimizing our expenses. We want to avoid putting too much monetary stress on our studio. If the game is not an instant success at its release the studio won't be forced to shut down it's door. We don't design our video game to become super rich. We make our video game because we want to create a hub for our community to share. In fact we are not even in the business of video games... I think that's why our project is a lot different from other gaming studios. We don't create video games to make profit from them. Citywars Savage is a tool to achieve the creation of our community. Citywars Savage is not just a product to sell but a tool to create something a lot bigger.

The only problem with our strategy is our lack of funding. Yes we minimize the risks of failure but it also reduces the chance to become really big. We don't have a big marketing budget which makes our growth extremely inefficient and slow. This is why we are searching for the possibility of a publisher / investor who would be interested to invest in our project. Someone who got the firepower and business network to put our project on steroids.

Our goal is to make this project a success and we are really open to any negotiation, even the most extreme if it benefits the project in the long term. We don't want a business partner that only want to cash in / cash out the project. We got many propositions in the past and we refused them because their interest was not in the long term of this project.

We plan to work on Citywars Savage for the next 5 years to come. We already have assembled a list of professionals ready to work with us and we will slowly add them to the team step by step once we got the budget to pay their salaries.

Senior Programmer
Community Manager
Texture Artist
Content Creator
Content Creator
Content Creator


Gameplay

The game is separated into 4 types of distinct gameplay. Rpg / City build / City wars / Developer.

Rpg

You begin your journey into Citywars with the rpg section. Fast paced and easy to learn the rpg section is ideal to engage the new players. They can craft items / gather resources, enchant weapons / level up their character, fight mini-boss anything you normally do in a rpg. Then when you are more advanced in the game the player acquire his first house. You can a rent public plot on the main world were your house become available to the overworld. So your house doesn't have a permanent location. You technically rent the teleporter in the overworld to access your own private personal house. So you can change anytime the location of your house. In this house you can build anything you like. The most important one, is the ability to build workbench like a crafting table letting you craft your very own tools. You become much more efficient in the game since now you don't need anymore to explore every city to gain access to different services. You can build inside your house all the utilities you need at the same place and upgrade them to be able to craft better tools and better weapons. Also you can manage who has access to build in your house so you can give access to your friends to build together.

City build

After a while in the game you will have the chance to build your very own city. This time instead of having a single house you have your very own territory. You can link permanently your house inside that territory and also give plots to your friends giving them access to their house anytime. Same as your house previously, for your city, you manage who has access to build what. Each buildings you build in your city can unlock a special service. Like by example, by building a wizard school, all your citizens will now be able to level up inside your city all their magic abilities. Or a blacksmith to customise your weapons, the list goes on and on. Each building has their own set of services that are normally scathered everywhere in the rpg world, but now they can all be assembled at the same place inside your city. To progress in the game you have to acquire certain buildings before being able to build better ones. At this level of the game you will be required to work in a team to progress since developing your city is really really expensive compared to what you were used in the rpg part with progressing your own character.

City wars

Keep in mind that until now your city was private in an independent world. Where random strangers can't access your city. You controlled completely who had access to your city. When you enter the end game, you can now make your city public, accessible to everyone by renting a teleporter from the overworld. Exactly like what you did with your house in the beginning of the game. But now with your city, you have to be really careful because renting teleporter for a city are all located into the pvp enabled area of the game. Which mean that if you connect your city to the overworld you can be victim of raids and attacks from other players / cities / clans. You enter a level of gameplay that is reserved to only the stronger and most dedicated players of Citywars Savage. All your time and effort spent to level your character, gather resources and expanding your city are put to the ultimate test. You won't be able to challenge others big cities if you didn't make some allies on your adventure. Make sure to have an efficient and well prepared city before entering this area of the game. Otherwise other players will take pleasure to crush your hopes.

If you manage to survive long enough in this area of the game it gives you access to the most interesting and lucrative parts of the game.

Developer

This part is reserved for players who desire to offer more than simply playing the game. We create all the tools required to create and edit content in the game. Which mean we will give to some of our most talented players the possibility to help us develop the game. We want to teach our community how to design the game itself. This will be extremely handy to create a massive amount of content everyday. Also one of the most important parts of any game is it's calibration, especially for a mmorpg to fight versus inflation. Players always find new ways to exploit and abuse the system. It's part of the game but by having the community involved directly in the development of your game, the response time to any incident is almost instant. Players who play the game regularly knows in real time what is going on and can quickly act to fix and contain a problem. As the main game developer it's impossible to keep an eye on everything and a lot of things can escape our vision.

Citywars Pre-Alpha 068

The plan is to develop all these systems in the next 5 years. At the moment the current version of the game only offer the rpg part with a small 20 minutes of gameplay. That rpg part is not what is important, it's only a demo to show off the creation toolkit inside the game. The important part is the Developer one which is ready to be in operation. This is why we will soft launch the game in alpha at the end of december. All the rest, City build and City wars are still in development. So don't expect to be able to build your city in the alpha demo it's not ready yet. Some of these systems are already half completed but still require a lot of development to be playable by regular players. Also right now the rpg part is quite small compared to what we aim and it will slowly become bigger and bigger with the involvement of our community in the design of our video game. Citywars Savage is a really big project a long development plan. We don't want to create a single project we want to create a community that will hold for a decade.

List of feature

Rpg

Gathering resources
Instagram 6b7c4a4cfa33ac663e58361508a0464a.gif Almost every block in the world can be interacted with. You only need the right tool to interact with. You can also connect blueprints to them to give them more elaborate purposes.
Development:
Gameplay:
Crafting
Instagram c5a3a9f6fb78a22a94d6f7993de1c17c.gif You can craft items like any survival game. Except you can't craft on yourself. Every type of recipes required is specific of the crafting table.
Development:
Gameplay:


[Gamemode] Dungeon fight
Instagram 4b58164460afa26541101fae727ef130.gif These dungeons are programmed with the blueprint system. Allowing us to infinitely custom them.
Development:
Gameplay:
[Gamemode] Arena
Instagram 9fb79ba445377e90bcd3953fec85d8b2.gif Player can defeat waves of enemies to gain loot and money. It's a nice fun way to farm loot. Better to be well equiped before entering.
Development:
Gameplay:


[Gamemode] Tavern
Instagram 9e270ba6b1b8383d02bf092af3465696.gif Player can work at the tavern to make a quick buck. The gamemode is quite easy. Npc/Player request a drink. Waiter have to fulfill the order to make the money.
Development:
Gameplay:
[Gamemode] Jump
Instagram 2058f0f5bf040d0dfdf68508a59179d1.gif The player can play parkour mode. Where the first player to reach the end of the map to win the level. Then everyone is teleported to the next level and the game continues. The player who success the most map win the game.
Development:
Gameplay:


Skin changer
Instagram 71a70e2d084714838e2db4e1375aa51a.gif You can shop for new skins in the game. There is also the possibility to upload your skin on the website and have your own custom skin.
Development:
Gameplay:
Custom character
Instagram 72ae935c6176d31476ca3241195175ac.gif Player can pay to get their own custom character in the game. These custom characters are not simple reskin but complete skin with custom props to complete the look.
Development:
Gameplay:


City Build

Survival build
Instagram 5bb8d46089c92ac9feab2e7f8594b594.gif This is the survival build that regular players will have access to build in the game. These are limited in features to avoid players abusing and destroying the area.
Development:
Gameplay:
Damageable props
Instagram 502775ed0d249eb547510b88dc15e214.gif Buildings can be destroyed by other players. This is not applicable to the main overworld since everything is protected from pvp.
Development:
Gameplay:


Developer

Disguise character
Instagram 8a45d03cf33d54c13bca31ee0ae0e1dc.gif Player can change their skin and model in real time. Allowing us to create really interesting gamemodes and fun adventure quests.
Development:
Gameplay:
Quick mob editing
Instagram 1d2884a211bf31f7b3242d1f060cc81e.gif With the blueprint system it's super easy to design new mobs and configure them to behave differently from each other.
Development:
Gameplay:


Creative tool
Instagram 3eb1ae53b9bebb3a779354a424ec49a8.gif We have a powerful creative tool that allow us to quickly edit the world. Allowing the construction of worlds with other players in real-time.
Development:
Gameplay:
Scale editor
Instagram 3f1e3526735c0891a2b2308aa480296e.gif Character effect. You can change the scale of any living entity in the game. Player or npc. In the future this system will allow morphing over the character to have even more control.
Development:
Gameplay:


[Gamemode] Html5 mini-game
Instagram 665d349beb5b2848efa3be51b0a4c992.gif Each blocks are configured in json. Allowing anything to be edited into them quickly. OnTouch block cause damage with a vine. But you can also convert them into heal stations or anything of your choice.
Development:
Gameplay:


Customizable sign
Instagram abd3125fa0608a993b9281c92e35f19b.gif While building player can place signs and other objects with unique cool icon to personalise event more their city. We currently have a database of +3000 sign implemented in the game.
Development:
Gameplay:


Technical

Split screen
Instagram 09ef09b95de6d4acb2665d9ebf0a0d28.gif The split screen is not 100% finished. But you can play split screen at the moment since we implemented a way to specify unique control on every game started on your computer.
Development:
Gameplay:
Mobile compatibility
Instagram a5ab798b86feae58787aa1c4a88231d1.gif The mobile version still need a lot of optimisation work but the biggest part is done. This version is not planned until the pc game is ready but can be accelerated if desired.
Development:
Gameplay:


Third Party Controller
Instagram c5e798eb1c8f917944241a9af2eadfbc.gif We use a library of third party controller giving us a big variety of accessible controllers for the game. These can be used both on the pc version and mobile version of the game.
Development:
Gameplay:


Multiplayer Capacity

Our recent stress test can actually old more than 500 concurrent players online.

We use many different techniques to be able to achieve this number. Let's take for example a player movement location packet. First we build our very own network infrastructure from scratch since all other available options on the market had a lot of useless garbage in their request. We cut to the maxim the amount of bytes sent by each request by keeping only the address to where to deliver the packet and our movement information. We are minicious on the amount of bytes sent by package.

Instead of sending float location X Y Z who require 4 bytes by float like other server. (4 x 3 = 12 byte a location packet). We strip our movement from the Z axis. The height of the player is only send when the player is not on the ground and when the player is on the ground the server calculate automatically the height of the character in function of the height of the map. Allowing us to trim 4 byte from the packet by not having to use the height location since most of the time a player is not in the air.

Then we developed our own compression system to get rid of unnecessary data that are not crucial for the movement. With this system our movement packet lost some of their precision but we developed on the server a system to emulate back that lost precision. Character movement are not as precise then before but it almost impossible to notify it and this optimisation let us cut in half the amount of bytes sent by the server.

Then another optimisation we did was using relative position instead of global location. We don't need to know where exactly is the player globally in the map every packet. We send only at the first connection it's global location. From them we can notify the server only it's relative position from that global location we send earlier. Resulting in another important optimisation on the player movement. Instead of having to use integer or float this allow us to use use bytes to communicate our player location.

We then create a system that queue the packet every 0.x second instead of sending a new packet for every CPU tick. Allowing us to merge packet instead of having to resend every single time the header of the address in our packet. We combined that optimisation with a movement prediction player and the result is really great. Movement feel right and precise but most importantly are highly optimised. We try to be really careful on the amount of packet sent by the server. Which allow us to have a really performance proof and massively multiplayer server.

Those optimisation we did to the character movement are only the tips of the iceberg. The list of optimisation would probably require is own wiki page but almost everything on the server is treated with the same dedication to save the maximum amount of packet. The design of our map by example are built by design to minimise the amount of information to be sent by the server. Each information stored on the map are stored in bytes to minimise the information transferred on the server. We also use many different techniques like Gzip to compressed by the server and then uncompressed by the client the information sent to assure the best utilisation of our network.

In the next year we will finish one of our biggest optimisation. Right now it's not a priority since the server are still empty but we are currently transforming our main optimised server into a multi tread cloud instance. Were each map of the game will become their own miniature server able to hold up to 500 players individually. Pushing event further our multiplayer capacity. Instead of having our player connected to one centralised server. Player across the world will be connected to CDN server located everywhere in the world which in return will be connected to our redirected proxies server and finally the redirected proxies server will connect you into the right server(cloud instance/map) depending on your location in the game. While moving from one map to another the proxies server will connect and disconnect you from 2 different server. But since you are always connected to the same server you can't see the manipulation. This was a really advanced technique keep secret from Minecraft used by comercial minecraft server having more than 3000 concurrent players. Minecraft server can difficulty hold more than 300 players without having massive lag but by having secretly 10 minecraft server hidden behind a proxy player thinks they are all on the same server playing the same. You can then link together some utility like the in-game chat's and the player inventory and player won't even be able to see the difference.

Also the illusion on minecraft was not perfect since normally you love to play with everyone on the same map. Because minecraft had huge giant world would make that technique not perfect in some cases and break the illusion of having one massively multiplayer server. One of the reasons why we decided to build each of our map really small on Citywars Savage was to enforce this illusion by forcing the player to change really quickly from a map to another one giving us the perfect environment to use that kind of technology to its absolute maximum. All those years spent administering our minecraft server prepare us to the development of our own infrastructure.

We didn't achieve what we achieve today in the first attempt. This is technically our fourth attempt to create a massively multiplayer server. It took us 10 year to learn and master those techniques. I write the whole story behind it in case you are interested. LINK_TO_STORIES_SECTION

Development plan

Marketing

Lua error: Cannot create process: proc_open(/dev/null): failed to open stream: Operation not permitted