Pre-alpha Technical Outline

From Citywars Savage
Revision as of 04:09, 6 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".

Artistic Direction

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

We decide to go with a "Minecraft" look for many reasons. First we have operate a minecraft server during 7 years. So our community is well attached to this particular look. Plus it's a really easy and simple visual to implement. If we need new assets or new props we can easily do them ourselves. We use that simplicity look to concentrate our effort and make into the game functionality. We are excellent programmer and functionality developer but we lack skills when it's time to create detailed mesh and high quality texture. Like they said know invest in your force and know your weakness and this is exactly what we did.

Plus our list of assets are exchangeable at anytime easily. It's the game who build the map and the scene. Everything is made dynamically from list of database of asset. Replace the list with a single drag and drop action and you got a complete new game. This was meant to make the game easily replaceable in case we decide to change the game artistic direction during it's development. 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.

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 features

List of some of the features in the game. This doesn't include all the features because some of them would require their own wiki page to be fully explained. This list only includes the basics and core mechanics. We also created a little legend describing the current state of development of the features.

Legend

Development: XX% Gameplay: XX%
Represent the state of development in programation Represent the percentage of implementation into the gameplay

Here an example. A feature completely accessible and the coding is finished is development: 100% and gameplay: 100%. A feature that is half finished but its half coded part is fully accessible into the game is development: 50% and gameplay: 100%, which mean that 50% of what the feature will be once fully coded is currently 100% accessible to the community. And also a feature that is completely developed by half finished to be implemented into the gameplay is development: 100% and gameplay: 50%.

Rpg

These features are available anytime in the game. You don't need to be staff or have special permissions. They are accessible from the beginning of the game and they are part of the core gameplay.

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:


Inventory
Instagram e6449e8d1fb63b199d47c9d03893d58b.gif Since it's a multiplayer game we can't pause the game and we didn't want to block the user view making him unaware of what is going on in the game. So the inventory is designed in a way that you can still play in the game while operating it.
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] Puzzle game
Instagram 4dd26b840f04c0c995c10e0f5c12b0e7.gif Same for the puzzle. There is technically no difference between a dungeon or a puzzle. It's all made with the same blueprint system.
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:


Chest Storage
Instagram 64ad183001c60f2a1a1a170d149efbf7.gif You can store your precious resources inside chests. Chest that can be placed inside your house and your city.
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:
[Gamemode] Html5 mini-game
Instagram 360f7402a0eb6db175ec970268d95108.gif This feature is still highly experimental due to its difficulty to port on Android, but player can use the mini html browser set to a predefined page. Allowing by example players to play .io games inside Citywars Savage.
Development:
Gameplay:


City Build

City building features are not fully listed since this part of the game is still heavily in development. The basic of it works, but players can't access it directly in the game without knowing the commands and enter the dev mode. This part of the game should be added in the next 6 months.

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

These features are reserved mostly to developers/staffs. Since the game is still really small and doesn't contain much gameplay, probably that the vast majority of our current player base will integrate in the game as staff to help build the project.

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:


Storyline creator
Instagram 2fd035ad5460d04b907b7500896314b7.gif You can create quick and easy storylines by importing images in the game. giving to quest maker an infinite amount of possibility.
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:
Semi-procedural creation kit
Instagram 074d7cf7b9035d3ab9abd87f5e7da38b.gif Procedural worlds are a bit boring in general. But procedural tools are really handy to design quickly new worlds. You can create your own seamless procedural worlds.
Development:
Gameplay:


Customisable blocks
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:
Changeable filters
Instagram 59619e4d495f560bb451a3d78682ae9e.gif Filters can be applied with a blueprint or in the json configuration of a world. Making the creation of beautiful and different biomes quickly and easily.
Development:
Gameplay:


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


Technical

Here are all the features that are not exactly for a type of gameplay but more related to the game itself or the server. These features benefits the general state of the game.

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 optimisations to work, but the biggest part is done. This version is not planned until the pc version is ready, but can be accelerated if desired.
Development:
Gameplay:


Third party controllers
Instagram c5e798eb1c8f917944241a9af2eadfbc.gif We use a library with third party controllers tools, 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

By our recent stress test, we can actually hold 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. We built our very own network infrastructure from scratch since all other available options on the market had a lot of useless garbage in their requests. We cut to the maxium the amount of bytes sent by each requests by keeping only the address to where to deliver the packet and our movement information. We are minutious on the amount of bytes sent.

Instead of sending float locations X Y Z that require 4 bytes per floats like other servers (4 x 3 = 12 byte a location packet), we used many trick to minimise bytes comsumption. We striped the Z axis from our movements. The height of the player is only sent 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 relative to his location in the world. Allowing us to trim 4 bytes 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 its precision, but we developed on the server a system to emulate back that lost precision. Character movements are not as precise than before but its almost impossible to notice 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 positions instead of global locations. We don't need to know where exactly is the player globally in the world in every packets. We send only at the first connection it's global location. From then we can send the server only relative position updates from that global location we sent earlier. Resulting in another important optimisation on the player movement. Instead of having to use integers or floats this allowed us to use use bytes to communicate our player location saving us another 6 bytes per movement packet.

We then created a system that queue the packet every 0.x second instead of sending a new packet for every CPU ticks. Allowing us to merge packets instead of having to resend every single time the whole TCP header of the packet which is about 20 bytes. We combined that optimisation with a movement prediction of the 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 packets sent by the server. Which allow us to have many performance improvements and a massively multiplayer server.

TCP segment header
Offsets Octet 0 1 2 3
Octet Bit  7  6  5  4  3  2  1  0  7  6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
0 0 Source port Destination port
4 32 Sequence number
8 64 Acknowledgment number (if ACK set)
12 96 Data offset Reserved
0 0 0
NS
CWR
ECE
URG
ACK
PSH
RST
SYN
FIN
Window Size
16 128 Checksum Urgent pointer (if URG set)
20
...
160
...
Options (if data offset > 5. Padded at the end with "0" bytes if necessary.)
...


Proxy network server exemple

These optimisations to the character movement are only the tip of the iceberg. The list of network optimisations would probably require its own wiki page but almost everything on the server is treated with the same dedication to save the maximum amount of packets. The save system of our world, by example, is built and designed to minimise the amount of information to be sent by the server. Each information stored on the world are stored in bytes to minimise the information transferred to the client. We also use many different techniques like Gzip to compress by the server and then uncompress 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 servers are still empty but we are currently transforming our main optimised server into a multi tread cloud network. Were each world of the game will become their own miniature server able to hold up to 500 players individually. Pushing even further our multiplayer capacity. Instead of having our player connected to one centralised server. Players across the world will be connected to a network of servers located everywhere in the world which will act a proxy servers and will connect you into the right server (cloud instance/world) depending on your location in the game. While moving from one world to another, the proxy server will connect and disconnect you from 2 differents servers. But since you are always connected to the same server you can't see the manipulation. This was a really advanced technique, kept mostly secret and used by commercial Minecraft servers having more than 3000 concurrent players. Minecraft servers has difficulty holding more than 300 players without having massive lagm, but by having 10 Minecraft servers hidden behind a proxy players think they are all on the same server playing in the same place. You can then link together some utilities like the in-game chat's and the player inventory and player won't even be able to see the difference. This also protects us from most DDOS attacks since the game servers are hidden behind proxies.


Also the illusion on Minecraft was not perfect since normally you love to play with everyone on the same world. Because minecraft had huge worlds, it 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 worlds really small on Citywars Savage was to enforce this illusion by forcing the player to change really quickly from a world 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 prepared us to the development of our own infrastructure.

We didn't achieve what we achieved today in the first attempt. This is technically our fourth attempt to create a massively multiplayer server. It took us 10 years to learn and master those techniques. I wrote the whole story behind it in case you are interested. Server Creation: Origin Story

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


Development plan

Marketing

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