Pre-alpha Technical Outline
Lua error: Cannot create process: proc_open(/dev/null): failed to open stream: Operation not permitted
Introduction
Game Pitch
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
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".
The Team
Picture | Name | Job | Business share |
---|---|---|---|
PICTURE | Dany Gervais | Project Manager | 50% Share |
PICTURE | Sebastien Couture | Network Programmer | 50% Share |
Text from the business plan :
Sébastien Couture and Dany Gervais are the co-owners of 01 Studio, they each have together more than 10 years of experience in the field. Mr. Couture, network programmer, is in charge of the logistics and accounting of the business. Mr. Gervais, the project manager, is the lead the project and is the staff manager. Together they have worked more than seven years in the management and administration of video game servers, such as the popular game Minecraft owned by Microsoft. They developed in their spare time administrative tools and web applications for all sectors of activity in Quebec, like accounting systems, inventory management and transactional e-commerce websites. These projects have been the basis of their learning in the field of business management. These allowed them to gather a lot of knowledge in sales, customer management, billing and project maintenance. The Funds gathered with past projects are used today to finance the development of their first video game named Citywars Savage, It's their first video game but not their first project in the gaming industry.
We have been friends since primary school and we are currently living together for more than X years. We convert half of our apartment into our studio and we work from domicile. All those years spent together developing project of any sort have made our duo highly efficient.
History
From 2011 to 2016, we hosted one of the biggest commercial Canadian servers of the popular game called Minecraft.We were not associate in any sort with minecraft but one of they key factors to the success of Minecraft was their ability to provide tools for multiplayer servers owners like us to distribute their multiplayer over the internet.
Our job was to distribute the multiplayer service and promote it as our own but the nice thing about minecraft is we could also mod the server and make the game better than the original, Giving our community a great gameplay experience. This is where we learn most of our programing skills. Our server hosted more than 500 000 unique players and we learn to be extremely resourceful and innovative to crush the competition. Still today we have members who reach us and talk again about the success of our Minecraft Server. What we developed was not just a modification of minecraft but more like a community portal. Were people would feel at home and share their creation.
Every 3 month we did special event on the server to stimulate the community and the economy of the server. You see one of those events here dated from Mars 2012 https://www.youtube.com/watch?v=Mm92pU5fnrw
We had some special gamemode developed by us, modding minecraft into a new kind of gameplay. This one was called Citywars Minecraft Zombie and you had to survive for a certain amount of wave. Each wave would increase the difficulty of the game and each time a player was killed it would become also a zombie and is goal was to kill the remaining humans to end the game faster. https://www.youtube.com/watch?v=tQzBTtpEZ7Q
Adventure map was a mod were player would be paid in-game money to build custom dungeon on the server. These dungeon would then be procedurally generated in the map and the community would raid these dungeons in team to defeat them and loot their resource. https://www.youtube.com/watch?v=Ero1wcCucm8
Staff also had the opportunity to create their own custom event with tool we delivered to them. This event was named forge and was entirely organised by our staff. They did an excellent job entrainement for the community. https://www.youtube.com/watch?v=jqckimt8Yg4
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.
|
|
|
|
|
|
|
|
|
|
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.
|
|
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.
|
|
|
|
|
|
|
|
|
Technical
In 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.
|
|
|
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.
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.) ... |
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.
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