![main project image](/_nuxt/main_image.Y9mPnMO0.webp)
Meta Fighter
A multiplayer 3D fighting game for browsers and mobile devices
![project image](/_nuxt/image1.DNpxcKPy.webp)
Germany
FTE game — 3D fighting game with NFT characters on the Binance Smart Chain network. The project offers the opportunity to play with basic characters, as well as to mint a unique character for oneself or stake (hold money for a specific period and return it to the wallet after expiration) one's own funds to receive NFTs after a certain number of days. On the website, users can also sell their NFT characters, buy, or stake them for skills and boosters. All fighters have their origin stories, skills, and attacks. NFT of a fighter created based on a basic one can be leveled up based on its level, characteristics, and tier. The higher all the fighter's parameters, the more they can play against stronger opponents, deliver more powerful blows, and have greater defense.
We developed a web platform, a browser-based and a mobile game. As part of the web platform it was necessary to develop authorization of the user by their crypto wallet, so that they could mint NFTs, sell and buy NFTs, stubs and MF tokens, as well as transfer their MF tokens to their spot wallet to play in FTE mode.
- Multiplayer game development for Android and iOS browsers and mobile devices
- Development of smart contracts and publication of smart contracts in Binance Smart Chain
- Development of scripts for launching smart contracts functions
- Server customization
- Backend Development
- Development of event detection service
- Web site development with authorization via Metamask and WalletConnect, marketplace, leaderboards, steaking and claming of MF Tokens.
- Development of concept art, illustrations, characters, 3D modeling, animations
- Web site and game prototype and design development.
- Copywriting
- Balancing the system of pumping characters
Development: Unity, Nuxt.js, PUG, CSS, Python, Solidity, Binance Smart Chain, Amazon EKS, Machinations
2D: Adobe Photoshop, Corel Painter
3D: 3d studio max, Autodesk Maya, Substance painter, ZBrush
Animations and special effects: Autedesk Maya, 3ds Max, Unity
![project image](/_nuxt/image2.24K9KadL.webp)
![project image](/_nuxt/image15.CttIUoUd.webp)
Game Modes
The game has three modes:
- F2P (Free-to-Play)
- F2G (Fight-to-Gain)
- F2E (Fight-to-Earn)
In F2P, players can play with their NFT or basic characters.In F2G, players can only play with NFT characters, gaining experience used to level up the character.In F2E, the game involves gaming tokens.These tokens can be purchased or withdrawn from the user's spot wallet.
A game where you experience thrilling 3D NFT fights and earn on Binance Smart Chain!
![project image](/_nuxt/image4.C7T6B4QQ.webp)
Project Structure
![project image](/_nuxt/image5.Ca23gW2O.webp)
Development Process
![project image](/_nuxt/image6.BuaJ6y9Q.webp)
Authorization
![project image](/_nuxt/image7.Cca_zYE4.webp)
NFT
![project image](/_nuxt/image8.BXFx5im5.webp)
Marketplace
![project image](/_nuxt/image9.BheR3o82.webp)
Staking
- For experience boosters (given out immediately for 30 or 60 days, after which they burn out and the money becomes available for refund)
- For NFT characters (after 7 days you will get a free NFT of a certain type and the money will be refundable)
- For Skills (given out immediately for 45 days, after which the skill burns out and the money becomes available for refund)
- For MF tokens (works like a bank deposit with rates from 2.5 to 128% per annum)
![project image](/_nuxt/image10.-7RztSiv.webp)
Claiming
![project image](/_nuxt/image11.V-ZL6WQP.webp)
BlockChain event detection service
What stages of game creation did we go through?
![project image](/_nuxt/image12.BVPqetLX.webp)
Structure
- Main screen - the map, which had a GUI to navigate between the customization screens, leaderboard and MY NFT, as well as arenas that could be navigated to for battles
- A mode selection screen where the FTP, FTE, and FTG modes could be viewed and selected
- A character selection screen where the user can choose who they will play as Lobby screen where players meet each other
- Lobby screen where players meet each other
- Battle loading screen, where all the necessary resources are downloaded before the players find each other
- The battle screen, this is the battlefield itself
- Win/loss screen
- Leaderboard, a table of leaderboards for various condition
- A list of the player's available NFTs, where you can pump up your character or add boosters to it customization screen
Sound
Unique sounds and music were recorded for the game by the composer and sound designer, who also integrated and customized them using the FMOD utility. Due to more than a thousand different possible kicks of the fighters and therefore the impossibility to make a sound for each kick (due to the limitation of the web build), the sounds were written in a generalized way for the categories of kicks. As a style of music we decided to use combat and modern music to emphasize the uncompromising style of the game.
Arenas
3D Graphics
The approach to 3d graphics was divided into 2 components - fighters and arenas. Each fighter was created first on the concept from the artist in ZBrush in the form of a highly polygonal and elaborated model, then transferred to one of the programs working with 3d graphics (Maya, Max) and brought to the game model. This approach allowed to achieve high quality models of fighters in the game with a small number of polygons. Also there were certain works with materials to achieve maximum quality.3d models of arenas were created according to the artists' concepts. They consist of two types - general and game. The general one is needed for camera flying at the beginning of the battle. On the first arena were tested all possible graphical solutions that can be used in the web, without significantly reducing the framerate. The other arenas followed the technical conditions of the first arena.
Special Effects
Different game modes implementation
Within the framework of the terms of reference, it was necessary to realize 3 game modes - F2P (Free-to-Play), F2G (Fight-to-Gain), F2E (Fight-to-Earn).F2P mode is most popular for players who have not yet purchased their NFTs, and want to just practice in this game with bots and real players. F2G - here the player must be authorized through a crypto wallet and play as an NFT. PvP(player-vs-player) and PvE(player-vs-enemy) play is available, as well as 1vs1 or 3vs3. In PvP mode the experience point earning rate is higher than in PvE mode. Also in 3vs3 mode you can earn experience for 3 of your NFTs at once. In FtE mode a player must be not only authorized and have NFT on his wallet, but also keep credits on his in-game (spot) wallet, from which he will have to make a bet in the game. Each arena will have its own bet. The player who wins, takes all the prize minus 10%, which is taken by the platform.
Networking
In addition to the basic data requests for the user, we implemented:
- A separate player selection service that allows to distribute players by rooms, arenas and regions
- A socket service for controlling the battle and issuing its results
- Blockchain event catching service
- Leaderboard player counting service
![project image](/_nuxt/image14.nBZzC-YS.webp)
Anti-cheat
Game optimization
One of the most challenging tasks was the realization of a 3D fighting game on the web. Due to the limited resources provided by the browser, it was necessary to optimize all graphics, as well as its loading, regular memory management. After the sources were optimized for WebGL, it was necessary to change this method of data preloading and adapt all resources for use on mobile devices - shaders, 3D models, light and much moreProtection and blocking from various DDoS attacks
Throughout the development of the project, 3 attacks of attackers were reflected. For protection we used Cloudflare, Cloudfront, and a load balancer in AWS architecture. Also, as a defense against cheating, a battle control system was developed, covered with encryption and controlled only by the backend.![](/_nuxt/contact_pattern_3.Z60ZBNLA.webp)
![letter](/_nuxt/letter.LghpoCE-.webp)
![orange](/_nuxt/orange.CbXrNmX3.webp)