# Welcome to MiniTon

Last update: Jan 9th, 2024

<mark style="color:blue;">**MiniTon is a social eSport platform**</mark> <mark style="color:blue;"></mark><mark style="color:blue;">based on</mark> [<mark style="color:blue;">**TON**</mark>](https://ton.org/) <mark style="color:blue;">&</mark> [<mark style="color:blue;">**Telegram**</mark>](https://telegram.org/) <mark style="color:blue;">Mini-app.</mark>

MiniTon integrates blockchain technology and community governance:

* Facilitate the inclusion of all players in equitable and enjoyable skill-based games, providing opportunities to earn prizes through skills.&#x20;
* Facilitate the rapid dissemination of high-quality games through social virality.&#x20;
* Empower developers to monetize games and attain sustainable performance growth.

## Quick Learn MiniTon through Core Screens

<div data-full-width="false"><figure><img src="/files/LHBVTZS29qemU3dxV9ui" alt=""><figcaption><p>Start a match</p></figcaption></figure></div>

<figure><img src="/files/iIwZsS6pu9R4rXTjDZ2S" alt=""><figcaption><p>Play Games</p></figcaption></figure>

<figure><img src="/files/PKQqjmF4D3oU1gCe2ATA" alt=""><figcaption><p>Win Prize</p></figcaption></figure>

## Highlights

<table data-view="cards"><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><strong>Seamless User Onboarding</strong></td><td>Embrace the user-friendly Skill-to-Win&#x26;Earn model, attracting both Web2 players using fiat currency and Web3 enthusiasts with crypto tokens for a diverse and engaged user base.</td></tr><tr><td><strong>Unparalleled Transparency and Equity</strong></td><td>The blockchain-backed technology ensures absolute fairness in gameplay and transparent outcomes, bolstering player trust.</td></tr><tr><td><strong>Viral Social Potential</strong></td><td>Empower players to create and share matches autonomously, igniting organic growth within social networks.</td></tr><tr><td><strong>Developer-Centric Approach</strong></td><td>Streamlined onboarding for both Web2 and Blockchain Games, minimizing development overhead and enhancing accessibility for game developers entering the TON platform.</td></tr><tr><td><strong>Sustainable and Scalable Business Model</strong></td><td>Implement a proven revenue model that transforms conventional approaches (Play-to-Earn, IAA, IAP) into highly efficient Earn-from-Tournaments, ensuring consistent revenue to fortify the tokenomic model.</td></tr><tr><td><strong>Proven Team Expertise</strong></td><td>A team with a track record of success in Web2 and Web3 domains, early pioneers in the WeChat mini-game ecosystem, and a rare blend of expertise in Crypto, gaming, international market expansion, and IM-based mini-game.</td></tr></tbody></table>

***

## Vision

Bring 100 million gamers into Web3.0

***

## Task

Attract 100 thousand game developers into **TON**

***

## How MiniTon Work

<table data-view="cards"><thead><tr><th></th><th></th></tr></thead><tbody><tr><td><strong>Skill To Win</strong></td><td>Gamers deposit Toncoin or other crypto tokens to participate in skill-based competitions. The winner claims the losers’ deposits and sponsorship bonus.</td></tr><tr><td><strong>Community-driven Growth</strong></td><td>Promote top-notch casual competitive games through Telegram and MiniTon, igniting viral growth. </td></tr><tr><td><strong>MiniTon SDK</strong></td><td>Enable all games to host social eSports events and generate income from tournaments.</td></tr><tr><td><strong>Blockchain Technology</strong></td><td>Ensure a <strong>reliable</strong> and <strong>fair</strong> on-chain competition playing field for gamers.</td></tr><tr><td><strong>Everyone can eSport</strong></td><td>Empower individuals to organize tournaments, fostering new social connections through competitive gaming.</td></tr></tbody></table>

***

## Product & Service

### For Gamers

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td></td><td><strong>Competitive Gaming Platform</strong></td><td></td><td><a href="/pages/sCnnPfNKkc3uhMcP2UiA">/pages/sCnnPfNKkc3uhMcP2UiA</a></td></tr><tr><td></td><td><strong>Social eSport</strong></td><td></td><td><a href="/pages/pBVSI8eUgUdKrEYHP4HM">/pages/pBVSI8eUgUdKrEYHP4HM</a></td></tr><tr><td></td><td><strong>Tournaments Host Open Platform</strong></td><td></td><td><a href="/pages/TBBxjjFHHnblqUHGU3Mn">/pages/TBBxjjFHHnblqUHGU3Mn</a></td></tr></tbody></table>

### For Developers: Tournaments as a Service

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td></td><td><strong>Developer Solution</strong></td><td></td><td><a href="/pages/egTxz7CKKUQkAjpu8gtI#miniton-sdk">/pages/egTxz7CKKUQkAjpu8gtI#miniton-sdk</a></td></tr><tr><td></td><td><strong>MiniTon SDK</strong></td><td></td><td><a href="/pages/SXPIm3aqT4MFph75Qn7Y">/pages/SXPIm3aqT4MFph75Qn7Y</a></td></tr></tbody></table>

***

{% hint style="info" %}
NOTE

MiniTon is unquestionably a form of entertainment that does not fit into the realm of gambling.

For more details, please refer to [The Legality of MiniTon](/legality/the-legality-of-miniton)
{% endhint %}

***

## Popular Articles

### &#x20;For new user

{% content-ref url="/pages/pBVSI8eUgUdKrEYHP4HM" %}
[Social Esports: Flexible and Compatible](/about-miniton/social-esports-flexible-and-compatible)
{% endcontent-ref %}

{% content-ref url="/pages/TBBxjjFHHnblqUHGU3Mn" %}
[Empowering Every Player to Organize Tournaments](/about-miniton/competitive-gaming-platform/empowering-every-player-to-organize-tournaments)
{% endcontent-ref %}

{% content-ref url="/pages/LgbV9Ikdy9uLWRBV0ZQq" %}
[The Legality of MiniTon](/legality/the-legality-of-miniton)
{% endcontent-ref %}

***

### For developer

{% content-ref url="/pages/egTxz7CKKUQkAjpu8gtI" %}
[Developer Solution](/about-miniton/developer-solution)
{% endcontent-ref %}

***

### For community member

{% content-ref url="/pages/JysIFeKWqm08h3FB5Nl8" %}
[Community](/builders/community)
{% endcontent-ref %}

{% content-ref url="/pages/aqshlBhLO7ROpo7JYZdu" %}
[DAO Governance](/builders/dao-governance)
{% endcontent-ref %}

***

***

## Glossary

<table data-header-hidden><thead><tr><th width="154"></th><th></th></tr></thead><tbody><tr><td><strong>TON</strong></td><td>Known as <a href="https://ton.org/">The Open Network</a> or Telegram Open Network, is a blockchain platform.</td></tr><tr><td><strong>Telegram Mini Game</strong></td><td>Telegram Games are <strong>small game applications</strong> that run entirely within the Telegram app. There is no need to download; click to play. </td></tr><tr><td><strong>Skill to Win</strong></td><td>The rules of the game rely on the player's ability to win through skill.</td></tr><tr><td><strong>Earn from Tournaments</strong></td><td>This refers to a business model where developers earn revenue by holding tournaments.</td></tr><tr><td><strong>IAA</strong></td><td>The profit model of watching ads in games is called In-app Advertising.</td></tr><tr><td><strong>IAP</strong></td><td>The profit model of in-game payment, also known as Pay to Win, is referred to as In-apps Purchase.</td></tr><tr><td><strong>Wallet</strong></td><td>Beyond the simple transfer and collection of crypto assets, a digital wallet - also referred to as a Crypto Wallet - offers a range of valuable functions. Among them are the management of private keys, visualizing encrypted assets, verifying identities, interacting with smart contracts, and even enabling social networking.</td></tr><tr><td><strong>Wallet Address</strong></td><td>When we generate a crypto wallet, we actually generate a private key through a series of algorithms, and use this private key to generate a public key and form a key pair. Think of the private key as your wallet's password, while the wallet address is the account that others use to send assets to you. While you can share your wallet address publicly, it's crucial to keep your private key confidential and not share it with anyone.</td></tr><tr><td><strong>USDT</strong></td><td>A cryptocurrency called Tether (USDT) is pegged to the US dollar. 1 USDT is equal to 1 US dollar.</td></tr><tr><td><strong>Entry</strong></td><td>On MiniTon, you only need to pay fees to enter a game. This fee is used to buy a ticket, which can be paid with points, fiat currency, or cryptocurrency.</td></tr></tbody></table>

## Software Reference

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Telegram</strong></td><td>Website: <a href="https://telegram.org/">https://telegram.org/</a></td><td>Android: <a href="https://telegram.org/dl/android/apk">https://telegram.org/dl/android/apk</a></td><td>iOS: <a href="https://apps.apple.com/us/app/telegram-messenger/id686449807">https://apps.apple.com/us/app/telegram-messenger/id686449807</a></td></tr><tr><td><strong>Telegram Wallet</strong></td><td><a href="https://t.me/wallet">https://t.me/wallet</a></td><td></td><td></td></tr><tr><td><strong>Set Telegram Language</strong></td><td><a href="https://translations.telegram.org/">https://translations.telegram.org/</a></td><td></td><td></td></tr></tbody></table>

## **Language**

This is the official MiniTon White-paper in English.

> This document is also available in 8 other language versions:
>
> [Русский](https://whitepaper-ru.miniton.games/)｜[简体中文](https://whitepaper-cn.miniton.games/)｜[日本](https://whitepaper-ja.miniton.games/)｜[한국어](https://whitepaper-ko.miniton.games/)｜[Español](https://whitepaper-es.miniton.games/)｜[Français](https://whitepaper-fr.miniton.games/)｜[Bahasa Indonesia](broken://spaces/QmhShQxHcbrQ2UAU3IQN)｜[ภาษาไทย](broken://spaces/cPTCSmf9djfwb6v6wrDH)

## DISCLAIMERS

{% hint style="info" %}

## Important Note

* MiniTon Whitepaper delves into the project's vision, implementation, and plans.&#x20;
* While certain aspects have been implemented, others are still in development or under plan.
* It is important to note that we have the ability to update the document as necessary.
* This document can NOT be used as a basis for any investment decision.
  {% endhint %}


# Why Now and Why MiniTon

## Seizing the Greatest Opportunity at the Turning Point of the Era

### Web3.0 Demands Crypto.

<table><thead><tr><th width="148.33333333333331"> </th><th>Web2.0</th><th>Web3.0</th></tr></thead><tbody><tr><td><strong>Action Client</strong></td><td>Smart Mobile Device</td><td>AR/VR, Robotics</td></tr><tr><td><strong>Action Model</strong></td><td>Big Data</td><td>AI</td></tr><tr><td><strong>Relationship</strong></td><td>UGC</td><td>Blockchain</td></tr></tbody></table>

The way we acquire information is undergoing a fundamental shift from variable to fixed costs, and this is a pivotal moment for information systems. Large Language Modes and Apple Vision Pro are accelerating this transition from Web2.0 to Web3.0. As information becomes more efficient, we are seeing significant changes in the demands and trends of human-to-human and human-to-data relationships. Blockchain technology can effectively meet the reform requirements of organizational relationships in the next information age: Web3.0.

### Crypto's Most Significant Narrative: Transition Web2.0 Users into the Web3.0 World

Despite the potential benefits of blockchain technology, there are still various challenges that hinder its widespread use. These include difficulties with deposit funds, gas fees, and the need to remember complex mnemonic phrases. Additionally, there is a lack of user-friendly products in the Crypto industry that can replace the ease of use and accessibility of Web 2.0 applications. Simply relying on investment value is not enough to retain users or accurately convey the value of Crypto.

### Crypto Game has Proven to be An Effective Way to Boost Crypto Adoption

Blockchain games like Axie and StepN have been effective in transitioning numerous Web 2.0 users into Crypto users. However, it is not feasible to rely solely on the investment value of products without a viable business model to convert Web 2.0 users into Web 3.0 users in the long term.

***

## Problem: Old Business Models for Games Don’t Work

> We have observed that this issue is currently the most significant challenge in the gaming industry, encompassing both Web2 games and blockchain games.

### For Gamers

<table data-view="cards"><thead><tr><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>IAA Game</strong></td><td>Ads interrupt gameplay</td><td></td></tr><tr><td><strong>IAP Game</strong> </td><td>Pay-to-win locks users out of fun</td><td></td></tr></tbody></table>

### For Developers

<table data-view="cards"><thead><tr><th></th><th></th><th></th></tr></thead><tbody><tr><td><p><strong>Cost</strong></p><p>Acquisition cost(CPI) increased by 3000%+ in the last 9 years</p></td><td></td><td></td></tr><tr><td><strong>Monetization</strong></td><td>Play-to-earn is not sustainable for blockchain games.</td><td>IAA and IAP have caused disruptions to the user experience.</td></tr></tbody></table>

***

## Opportunity: Telegram Mini-Game & TON

### Developers eager to join TON & Telegram

In-chat mini-games represent a new growth opportunity within the gaming industry. They offer developers a fresh market growth approach while simultaneously reducing development costs.

> Even for natively produced small games, the development cycle and cost can be reduced to at least 50% of that of mobile game apps. Under the same delivery effect, the R\&D payback cycle of mini-games is shorter.

<table><thead><tr><th width="215.33333333333331">For example: an RPG mobile game</th><th>Native version</th><th> H5 version</th></tr></thead><tbody><tr><td><strong>Development cycle</strong> / Month</td><td><em>6 - 10</em></td><td><em>3 - 4</em> </td></tr><tr><td><strong>Development cost</strong> / Million USD</td><td><em>0.7 - 1.5</em> </td><td><em>0.15 - 0.3</em></td></tr><tr><td><strong>Product lifecycle</strong> / Year</td><td><em>1.5 - 2</em> </td><td><em>1.5 - 2</em></td></tr></tbody></table>

### In the Telegram & TON platform, the Marketing & Monetization support is insufficient

> During April 2023 to August 2023, MiniTon team attempted to persuade 6 game studios to release TON-based blockchain games, but were not successful. The core reason was insufficient Marketing & Monetization support.

<table><thead><tr><th width="180.33333333333331">Core Infra. For Developer</th><th width="342"> Telegram Game Bot</th><th>WeChat Mini-game</th></tr></thead><tbody><tr><td><strong>MAU of Platform</strong> / Million</td><td>800</td><td>1300</td></tr><tr><td><strong>Growth Servic</strong>e</td><td><ul><li>The <a href="https://promote.telegram.org/">Telegram Ads Platform</a> cannot provide precise marketing. </li><li>Telegram and TON both lack a market growth platform for games. It is hard to find game users.</li></ul></td><td><ul><li>Precise Marketing Platform: WeChat Ads</li><li>Gaming Platform: "Discover" - "Game"</li></ul></td></tr><tr><td><strong>Monetization</strong></td><td><ul><li><p>IAP: </p><ul><li><a href="https://core.telegram.org/bots/payments">Telegram Payment</a></li><li><a href="https://pay.wallet.tg/">TON Wallet Bot</a></li></ul></li><li>IAA: <em>NULL</em></li></ul></td><td><ul><li>IAP: WeChat Pay</li><li>IAA: WeChat Ads</li></ul></td></tr></tbody></table>

***

## We Chose to Build A TON-based Market Growth Platform for Game Developers

{% hint style="info" %}
We have strong confidence in the future of the TON and Telegram.&#x20;

Our goal is to make TON one of the top choices for game developers.
{% endhint %}

To seamlessly achieve our goals, we have devised two key strategies.

<table data-view="cards"><thead><tr><th></th><th></th><th></th></tr></thead><tbody><tr><td><h4>Content</h4></td><td>Focus on casual competitive games suitable for experiencing and spreading within super mobile applications.</td><td></td></tr><tr><td><h4>Monetization</h4></td><td>Implement a proven robust Earn-from-Tournaments monetization model for gaming developers.</td><td></td></tr></tbody></table>

The decisions outlined above have been validated:

* Casual competitive games lead the way in the best-selling of WeChat Mini Games.
* SkillZ, a publicly traded U.S. company, has verified that the Earn-from-Tournaments business model is four times more efficient in monetization compared to traditional models.

We believe that game developers, through MiniTon, can:

* Enter TON and Telegram ecosystems at a low cost.
* Quickly tap into the potential of the TON and Telegram ecosystems.

As a result, game developers in the future will continue to provide a lot of games for the TON ecosystem.

***

## Market Size: Tens of Billions **US Dollars**

<table data-view="cards"><thead><tr><th></th><th></th><th></th></tr></thead><tbody><tr><td>In 2021, the GMV of tournament platform SkillZ (NYSE: SKLZ) was <strong>2.4 billion US dollars.</strong></td><td></td><td></td></tr><tr><td>In 2022, the market size of the main competitive games — Board &#x26; Card was <strong>27 billion US dollars</strong>.</td><td></td><td></td></tr><tr><td><p>In 2021, monthly advertising spending on WeChat Mini Games exceeded <strong>150 million</strong> <strong>US dollars.</strong> </p><p>As of May 2023, there are more than <strong>300,000 WeChat Mini Game developers</strong>.</p></td><td></td><td></td></tr></tbody></table>


# Social Esports: Flexible and Compatible

## Competition Process

<figure><img src="/files/LzbirRTUwCHXwsGEig4I" alt=""><figcaption></figcaption></figure>


# Entry Fee

Every match requires a ticket payment to participate.&#x20;

The payment currency is determined by the tournament host, which includes:

* Toncoin
* Points
* In-game items or NFTs
* Game tokens
* USDT

{% hint style="info" %}
By Q4 2024, MiniTon will expand game tokens for entering tournaments.&#x20;

The community will decide, through a voting process, which Crypto Tokens can be utilized for entering the tournament.
{% endhint %}

***

**Payment methods:**

* [Telegram Payment](https://core.telegram.org/bots/payments)
* [TON Wallet Bot](https://t.me/wallet)

***

**When to Pay Entry Fee:**

* Players must ensure that their account balance is sufficient before they choose tournaments.
* After completing opponent matching, the platform deducts the Entry Fee from the player's account balance.

{% hint style="info" %}
The ticket fees paid by players constitute one of the sources of the match prize pool. Upon completion of player matchmaking, all ticket fees are securely locked in the smart contract until the end of the tournament.
{% endhint %}


# Prize

## Bounty Sources

Every match features a **prize pool**, and the sole method for players to earn from it is by defeating their opponents through individual (or team) gaming skills. Those who prevail through skillful play claim the bets made by the defeated players.

In cases where a competition additionally offers prizes distributed according to specific ranking criteria, players meeting these criteria can also share in the prize pool.

**Prize pools** are funded by:

* Player ticket purchases
* Sponsorships from third parties (developers, MiniTon, advertisers, etc.)

In addition to the prize for each match, some tournaments(i.e., Private Tournaments hosted by MiniTon users) also feature a **Bonus Pool**. Players can earn rewards from the **Bonus Pool** by completing a series of matches and participating in specific tasks.

***

## Type of Prize

Prizes can take the form of:

* In-game items or NFTs
* Game tokens
* USDT
* Toncoin

The type of prize corresponds one-to-one with the currency used for player ticket purchases.&#x20;

> For example, if tickets are bought with Toncoin, the prizes will also be in Toncoin; if tickets are purchased with $AXS (Axie's token), the prizes will be in $AXS.

{% hint style="info" %}
Please note: if tickets are purchased with a bank card using US dollars or any other national currency, the prize will be in USDT tokens.
{% endhint %}

***

## Prize Fulfillment

{% hint style="info" %}
All prize distributions are determined by smart contracts, and comprehensive records of all match data and prize fulfillment are permanently stored on the blockchain.
{% endhint %}

Automated reward distribution occurs when the following four conditions are met:

* Player is entitled to rewards based on match rules and results.
* Match data is securely recorded on the blockchain through smart contracts.
* Platform anti-cheating systems confirm the absence of any illicit activities during the match.
* Players manually confirm the match results.


# Types of Tournaments

For each game, there are several types of tournaments that can be established.&#x20;

A tournament is made up of one or more matches.&#x20;

A tournament can only be associated with one single game.

<figure><img src="/files/zhDvJX0bk9EyGoUIAL9G" alt=""><figcaption><p>Tournaments Structure</p></figcaption></figure>

***

Based on the level of accessibility:

<table data-view="cards"><thead><tr><th>Type</th><th>Gamers</th><th>Host</th></tr></thead><tbody><tr><td><strong>Open Tournaments</strong></td><td>Open to all MiniTon users with the Entry Fee payment, without any additional eligibility criteria.</td><td><ul><li>MiniTon</li><li>Game Developer</li><li>MiniTon Community</li></ul></td></tr><tr><td><strong>Semi-Open Tournaments</strong></td><td>Exclusive to MiniTon users possessing certain characteristics (e.g., holding a Toncoin balance greater than 10).</td><td><ul><li>MiniTon</li><li>Game Developer</li><li>MiniTon Community</li></ul></td></tr><tr><td><strong>Private(Social) Tournaments</strong></td><td>Accessible only with the host's or tournament administrator's approval or invitation.</td><td><ul><li>MiniTon User</li></ul></td></tr></tbody></table>

> Hoster has the autonomy to establish tournament rules, recruit participants, and determine the commission they extract from player ticket purchases.

***

According to the number of players in each match:

<table data-view="cards"><thead><tr><th>Type</th><th>Description</th><th>VS Type</th></tr></thead><tbody><tr><td><strong>Standard Tournaments</strong></td><td>These are the “standard” type of tournament, pitting two players directly against each other in a winner-take-all competition. Most MiniTon games implement this kind of tournament, and they’re the best kind when still in the process of building up your player population.</td><td>1 v 1</td></tr><tr><td><strong>Multiple Player Tournaments</strong></td><td>In Multiple Player tournaments, you can have 3-10 players compete for the best score in the game. As in Head to Head, a lone winner takes all of the proceeds. These tournaments are best suited for games with large player populations, as more players are needed to fill in these games. </td><td>1 v N</td></tr><tr><td><strong>Bracket Tournaments</strong></td><td>In bracket tournaments, a group of players will compete in a series of rounds. The player who loses each round is eliminated, and the winner proceeds to compete against other winners. This process continues until only one player remains as the final winner. These types of tournaments are best suited for games that have a large player population since more players are needed to fill these games.</td><td>N v N</td></tr></tbody></table>


# Match Rules

## Event Structure

Different types of events have distinct rules. In both "Standard Matches" and "Multiplayer Matches," each match follows these rules:

| Event Rules                                                 | Standard Matches & Multiplayer Matches                             |
| ----------------------------------------------------------- | ------------------------------------------------------------------ |
| **Maximum Matchmaking Duration**                            | 30 seconds                                                         |
| **Maximum Pre-match Preparation Duration**                  | 600 seconds                                                        |
| **Timeout without Participation after Successful Matching** | Match remains valid, score set to 0, non-refundable Entry Fee      |
| **Determination of Victory or Ranking**                     | Based on the highest score                                         |
| **Tiebreaker for Players with Equal Scores**                | Players compete again until scores differ                          |
| **Timeout for All Players without Participation**           | Match remains valid, all players score 0, non-refundable Entry Fee |

## Quit Scenarios

<table><thead><tr><th width="187">Quit Scenario</th><th>Action</th></tr></thead><tbody><tr><td><strong>Matchmaking in Progress but No Result Yet</strong></td><td>Matchmaking terminates, Entry Fee terminated</td></tr><tr><td><strong>Successfully Matched but Match Not Started</strong></td><td>Entry Fee deducted, player must join within 10 mins. Failure results in 0 score, loss, non-refundable Entry Fee</td></tr><tr><td><strong>Match in Progress but Not Ended</strong></td><td>Match continues counting down, player must return before countdown ends</td></tr><tr><td><strong>Match Ended, but Player Hasn't Checked Score or Confirmed Results</strong></td><td>No effect on result, manual confirmation needed for prize distribution</td></tr></tbody></table>


# Competitive Gaming Platform

Build on Telegram BOT: t.me/MiniTonBot/MiniTonGame


# Discover and Indulge in Captivating  Games

* All games are fully compatible with Telegram, allowing instant access without downloading or leaving the Telegram app.
* [Game playability is assessed by the player community.](/builders/community)

{% embed url="<https://www.figma.com/proto/aCCPeTZtMJ3qL9tQZ7czNm/MiniTon-Game?node-id=1915-8016&page-id=185:3230&scaling=min-zoom&t=Mj7olug0emzdR6Dt-0&type=design>" %}

## Games Category

* Poker
* Chess
* Puzzle
* Casual
* Arcade
* 3Match
* Sport

## Game Features

* Fun
* Skill-based
* Easy to play
* Easy to win
* No ads, no in-app purchase
* Support multi-language
* Enable Tutorial for fresh
* Clear scoring rules

For more game feature requirements, please refer to:

{% content-ref url="/pages/xx1tV7necVtvnkm2tnHy" %}
[Developer Cooperation](/developer-success/developer-cooperation)
{% endcontent-ref %}


# Ensuring Game Fairness in Every Social Esports Encounter

* The platform assesses the skill levels of each player.
* Except for targeted invitations in private tournaments, open tournaments are matched based on player skill levels.
* Utilizing big data and machine learning for anti-cheat measures.
* Every competitive data is recorded on the TON blockchain, ensuring transparency throughout the process.


# Empowering Every Player to Organize Tournaments

Any MiniTon user can organize and host an esports tournament on the MiniTon.&#x20;

Esports tournaments organized by MiniTon users are called "**Social Tournaments**" or "**Private Tournaments**," representing one of the tournament types on MiniTon.

## Value Proposition

The social tournament feature provided by MiniTon is a public service that holds two fundamental values:

**For Gamers:**

1. Empowering all players to organize and host social esports tournaments.
2. Social tournaments may offer more attractive competition rules and prize structures compared to official open tournaments.

**For Game Developers:**

1. Leveraging social virality, social tournaments can rapidly attract more players through social invitations.
2. Creating a network effect fosters the rapid dissemination of game content and expands the user base.

## Participants in Social Tournaments

Social Tournaments work like room-card features in traditional card games. MiniTon adds an innovative investor mechanism to the room-card feature.

<table data-card-size="large" data-view="cards"><thead><tr><th>Roles</th><th>Responsibilities</th><th>Revenue Source</th></tr></thead><tbody><tr><td><strong>Host</strong></td><td><ul><li>Create tournaments</li><li>Define rules</li><li>Design revenue distribution plans</li><li>Invite investors and gamers.</li></ul></td><td>Commission from entry fees.</td></tr><tr><td><strong>Gamer</strong></td><td><ul><li>Participate in tournaments</li><li>Win prizes.</li></ul></td><td><ul><li>Match Prize</li><li>Tournaments Bonus Pool</li></ul></td></tr><tr><td><strong>Investor</strong></td><td><ul><li>Provide sponsorship funds for tournaments</li><li>Invite gamers and other investors.</li></ul></td><td>Commission from entry fees.</td></tr><tr><td><strong>MiniTon</strong></td><td><ul><li>Provide product and technical services for hosts and investors.</li></ul></td><td>Commission from entry fees.</td></tr></tbody></table>

<div data-full-width="true"><figure><img src="/files/GIqNhbDCOmqHvh1dQsQT" alt=""><figcaption></figcaption></figure></div>

## How to Become a Host

Players can host tournaments upon meeting the following two conditions:

1. Stake MiniTon Token $MTC
2. Pay MiniTon Token $MTC

The number of matches a tournament can organize depends on the amount of $MTC staked. The more token is staked, the more matches can be conducted.&#x20;

The total investment limit for investors in the tournament is determined by the amount of $MTC paid. If a higher amount is paid, the cap on the **bonus pool** for investors will be higher as well.

## How to Become an Investor

Any MiniTon player can become an investor in a social tournament by purchasing the **Sponsor Key** for that tournament.

### Sponsor Key and Bonus Pool

The funds used by investors to purchase Sponsor Keys will be locked in the **bonus pool** contract.&#x20;

**Bonus pool** provides liquidity for Sponsor Key transactions and facilitates prize distribution to players.

{% hint style="info" %}
**The price of Sponsor Keys = (S^2)/M**

***S** is the number of investors holding Sponsor Keys in the tournament*

***M** is a constant set by the organizer.*
{% endhint %}

The first purchaser of the Sponsor Key is the organizer.&#x20;

The organizer needs to set a lock-up period for the bonus pool, which must be at least 3 days before the end of the tournament. Before the lock-up begins, Sponsor Keys can be freely traded. After the lock-up starts, Sponsor Keys can no longer be freely traded. The funds remaining in the sponsorship pool will be distributed to eligible players according to the rules set by the host.

### Profitability for Investors

The profitability for investors depends on their assessment of the investment cost and potential future returns. Clearly, the more gamers participating in the invested tournament and the higher the ticket revenue, the greater the potential returns for investors.

Essential factors must be considered when deciding whether to invest in a social tournament:

* The organizer's ability to host financially viable tournaments.
* The attractiveness of the tournament rules and profit distribution rules set by the organizer.
* The potential for future growth and revenue generation for tournaments that still need to scale.&#x20;
* For already scaled tournaments, the decision should be based on the generated revenue and whether the current data indicates profitability.

## Win-win Goals

Based on the rules, the shared goal for all roles (host, investor, gamer, and MiniTon) is to attract more players to participate in the tournament, creating a network effect.

The revenue for all roles can be increased by continually inviting friends to participate, thereby enhancing individual earnings.

Through social tournaments, MiniTon creates a win-win ecosystem, offering unique revenue opportunities for investors, gamers, and hosts, fostering the social and competitive vitality of MiniTon.


# Developer Solution

## MiniTon SDK

#### Value Proposition

* Empowering developers with the rapid capability to host social esports events and profit from organizing "esports competitions."

#### Features

* Real-time Synchronous/Asynchronous player matchmaking based on skill levels
* Random number
* Anti-cheat
* Predictive and advisory adjustments to game parameters
* A/B test
* Real-time language translation
* Tracking and measurement

The SDK also plans to integrate commonly used TON API and Telegram API to reduce the cost of developers entering the TON and Telegram.

{% hint style="info" %}
Follow the [**SDK Integration Guide**](/developer-success/miniton-gaming-sdk), and quickly go live with MiniTon.
{% endhint %}

## **Developer Console**

The developer dashboard is a visual game/event management console.&#x20;

Within the developer dashboard, developers can:

* Visually configure game parameters, such as ticket payments, prizes, match duration, real-time or asynchronous, tournament types (Head to head, Multiple Player, Bracket), difficulty settings, achievement rewards, and more.
* Visually set up and track marketing campaigns.
* Visually track and analyze data.
* Manage user lifecycles.
* Conduct an A/B test.

## **New Business Model**&#x20;

Developers gain the ability to profit through hosting "esports competitions", a proven and more efficient monetization model compared to IAA and IAP.

<figure><img src="/files/5aKc3edZv53eqhaUIn7v" alt=""><figcaption></figcaption></figure>

## **Community-Based Liquidity Support**

#### **Game Token Swap**&#x20;

* If game developers release a game token on the TON, they can apply for free liquidity provision: MiniTon grants [MiniTon tokens](/about-miniton/sustainable-business-model#miniton-coin-mtc)($MTC) at no cost, which can be paired with developers' game tokens, reducing the cost of developers establishing liquidity pools. Developers can establish initial liquidity without depositing USDT.

#### **Using Game Tokens for Participation**&#x20;

* In Q4 of 2024, MiniTon will enable players to use specific game tokens issued by the games to enter a match, making it a valuable use case for game tokens and aiding developers in gaining liquidity.
* The decision on which game token can be used to purchase tickets will be determined by a community vote.

## **Community-driven Viral Growth**

* High-quality content can gain [community support](/builders/community) through early activities like trial runs, leading to recommended platform traffic upon launch.
* High-quality games can attract a significant number of community players to create tournaments.
* Player-sharing actions can earn MiniTon incentives, accelerating the viral spread of high-quality games.
* Community users can watch real-time broadcasts of every match.

## **Diverse Marketing Channels and Precision Marketing Service**

* MiniTon advertising space
* MiniTon task incentive system
* Various player communities
* Advertising within other games


# Sustainable Business Model

## Why Sustainable

* Diverse liquidity income: multiple revenue streams.
* Broad and extensive target audience, encompassing Web2 users, Crypto users, Web2 developers, and Web3 developers.
* Low dependence on external resources (such as game quality) and market cycles.
* High monetization potential due to widespread popularity: The "Earn-from-Tournaments" model can reach a maximum of 16%, far exceeding the industry average payment rates(2%) for in-app purchases in traditional gaming.

## Stable Income

### Revenue #1

When MiniTon organizes a competition, it deducts a commission percentage from each player's ticket purchase.

Player tickets may be paid in fiat currency, stablecoins, or game tokens. MiniTon's revenue may be in fiat currency, stablecoins, or game tokens. The diversity of revenue currencies will enhance MiniTon's financial robustness.

<figure><img src="/files/R2WudsCapTv3SLycbklS" alt=""><figcaption><p><em>* Note: All dollar amounts are just for illustrative purposes</em></p></figcaption></figure>

### Revenue #2

All the Ads Spaces listed on the [MiniTon platform](/about-miniton/competitive-gaming-platform) are NFT.&#x20;

Any user can obtain the right to use an advertising space by staking MiniTon token and paying a designated rental fee.

<figure><img src="/files/wS61hj7bDyFyiPCVOGFo" alt=""><figcaption><p>Ads Spaces Demo</p></figcaption></figure>

### Other Revenue

<table data-view="cards"><thead><tr><th></th><th></th><th></th></tr></thead><tbody><tr><td></td><td>Member Subscription</td><td></td></tr><tr><td></td><td>Marketing Agency</td><td></td></tr><tr><td></td><td>Game Incubation</td><td></td></tr></tbody></table>

***


# Tokenomic $MTC

We aim to fill the gap in game marketing and monetization support for Telegram and **TON** with MiniTon.

Our goal is to attract developers to join Telegram and **TON** while adhering to principles of **decentralization**, **fairness**, **sustainability**, and **scalability** in our operations.

The MTC token serves as a means of achieving decentralization and self-governance within MiniTon. It includes mechanisms for governance and financial incentives that aim to promote the growth of the MiniTon ecosystem and align with user interests. Our goal is to unite all token holders under a shared vision for the future of MiniTon.

## MiniTon Coin (MTC)

As the governance token of MiniTon, MiniTon Coin ($MTC) is built on the **TON Jetton**, serving as the foundation for MiniTon development and governance.

<figure><img src="/files/Lni50BkTnc6ZBGU8OtCK" alt=""><figcaption></figcaption></figure>

## Use Cases

Stake $MTC to get vote-escrowed $MTC，ve$MTC holders can participate in governance and earn incentives.

> ve$MTC will be implemented on the TON.

### Governance

ve$MTC holders can

* Vote for the game that will get initial traffic support
* Determine the incentives & developer profit sharing
* Rate on games, bet eSport
* Create tournaments

### Reward

* ve$MTC holders will get rewards through staking, voting, and other engagements.
* Reward outstanding developers
* Reward community members who invite friends to join MiniTon

{% hint style="info" %}
Only ve$MTC holders can share MiniTon’s growth incentives
{% endhint %}

> ve$MTC cannot be transferred. The only way to obtain veMTC is by staking MTC. The maximum lockup period is four years. Locking up 4,000 MTC for four years provides an initial balance of ve$MTC.
>
> A user's veMTC balance linearly decreases as the remaining time for MTC to unlock decreases. For example, the veMTC amount provided by locking 4,000 MTC for one year is the same as locking 2,000 MTC for two years or locking 1,000 MTC for four years.
>
> The maximum lockup period is four years. The formula is outlined as follows:
>
> MAXTIME = 4 \* 365 \* 86400\
> unlock\_time < (block\_time + MAXTIME) veMTC\_amount = MTC\_locked\_amount / MAXTIME \* (unlock\_time - block\_time)

In addition to participating in governance and earning incentives through ve$MTC, $MTC has the following uses:

### **Consumption**

* Qualify for organizing competitions or creating private tournaments by staking $MTC.
* Redeem benefits/NFT
* Increase the invite commission available during viral spread.
* Rent Ads Space
* Get on-chain random number

### Swap

* Exchange for tokens issued by games listed on the platform.

## **How to Acquire $MTC**

* Purchase through CEX/DEX
* Earn $MTC through staking, voting, and other engagements.

## **Inflation Control**

* MiniTon will periodically repurchase $MTC.
* MiniTon will periodically burn held $MTC.
* The functionality of $MTC will be subject to community suggestions and undergo voting for future additions or modifications.

## $MTC Allocation

#### The MiniTon Coin ($MTC) has a total supply of 100,000,000 (one hundred million).

#### The overall allocation of **MPC** is as follows:

<table><thead><tr><th width="169.9256589727318">Allocation Type</th><th width="165.30927835051546" align="right">MPC Amount</th><th align="right">Percentage</th></tr></thead><tbody><tr><td><strong>Team</strong> </td><td align="right">17,000,000</td><td align="right">17%</td></tr><tr><td><strong>Advisors</strong></td><td align="right">6,000,000</td><td align="right">6%</td></tr><tr><td><strong>Treasury</strong></td><td align="right">33,000,000</td><td align="right">33%</td></tr><tr><td><strong>Ecosystem</strong></td><td align="right">24,000,000</td><td align="right">24%</td></tr><tr><td><strong>Seed Round</strong></td><td align="right">10,000,000</td><td align="right">10%</td></tr><tr><td><strong>Angel Round</strong></td><td align="right">5,000,000</td><td align="right">5%</td></tr><tr><td><strong>Private  Round</strong></td><td align="right">4,000,000</td><td align="right">4%</td></tr><tr><td><strong>Public Round</strong></td><td align="right">1,000,000</td><td align="right">1%</td></tr><tr><td><strong>Total</strong></td><td align="right"><strong>100,000,000</strong></td><td align="right"><strong>100%</strong></td></tr></tbody></table>

## $MTC Release Schedule

All **$MTC** will be released in five years.

<table><thead><tr><th width="133.9256589727318">Allocation Type</th><th width="68">TGE</th><th width="599.3092783505155">Release Schedule</th></tr></thead><tbody><tr><td><strong>Team</strong> </td><td>0</td><td>12 months locked up, and to be linearly released over 36 months after a twelve-month.</td></tr><tr><td><strong>Advisors</strong></td><td>0</td><td>Locked for 6 months, then linearly release for 24 months</td></tr><tr><td><strong>Treasury</strong></td><td>0</td><td>Linear release over 60 months.</td></tr><tr><td><strong>Ecosystem</strong> </td><td>10%</td><td>Linear release for 24 months after TGE</td></tr><tr><td><strong>Seed Round</strong></td><td>5%</td><td>Locked for 5 months. Thereafter, unlock 15% per 5 months</td></tr><tr><td><strong>Angel Round</strong></td><td>10%</td><td>Locked for 4 months. Thereafter, unlock 15% per 4 months</td></tr><tr><td><strong>Private  Round</strong></td><td>10%</td><td>Locked for 3 months. Thereafter, unlock 15% per quarter</td></tr><tr><td><strong>Public Round</strong></td><td>50%</td><td>10% linearly release per month.</td></tr></tbody></table>


# Roadmap

{% hint style="info" %}

#### The roadmap will be updated from time to time

{% endhint %}

## Cold start

### Q1, 2024&#x20;

* [ ] **Launch MVP version to validate the business model and gather user behavior and preferences**
* [ ] **Target：**
  * [ ] MAU > 5,000
  * [ ] GAMES > 3
  * [ ] Monthly Income > 3k USD

### Q3, 2024

* [ ] **Launch Super Tournament**
* [ ] **Complete Fundraising**
* [ ] **Target：**
  * [ ] MAU > 200,000
  * [ ] Games > 10
  * [ ] Monthly Income > 1Mn USD

***

## User Scale & Developer Ecosystem

### Q4, 2024

* [ ] **Launch semi-open and private tournaments.**
* [ ] **Support more types of game tokens to enter a match**
* [ ] **Support more types of Prize**&#x20;
* [ ] **Launch Developer Console**
* [ ] **Token Listing**
* [ ] **Target:**
  * [ ] MAU > 1,000,000
  * [ ] Games > 20
  * [ ] Monthly Income > 6Mn USD

### 2025&#x20;

* [ ] **Scale traffic matrix.**
* [ ] **Expand the game category.**
* [ ] **Launch Game Token Swap.**
* [ ] **Target**
  * [ ] MAU > 5,000,000
  * [ ] Games > 100
  * [ ] Monthly Income > 30Mn USD

***

## DAO

### 2026

* [ ] Launch On-chain randomness service.
* [ ] Expand game content category, cover video, article, live-streaming.
* [ ] Upgrade MiniTon SDK to a Crypto Competition Protocol.
* [ ] Transit from treasury management to DAO governance.&#x20;


# Initial Team

> Our team comprises of a group of highly skilled professionals, with many having prior experience at the renowned Singapore-based cloud gaming enterprise, Bifrost Cloud. The flagship product of Bifrost Cloud, NetBoom, has achieved a remarkable feat by being the foremost console-to-cloud gaming platform globally, based on user count. It surpasses even major competitors such as Google Stadia and Nvidia GeForceNOW by a significant margin, which is an accomplishment repeated five times. In September 2021, our team began to explore the Web3 landscape and actively participated in several esteemed Web3 initiatives.

## Team Strength

* Our team boasts a robust track record of successful projects across both Web2 and Web3 domains. We have the distinction of being early adopters in the WeChat mini-game ecosystem and have gained recognition as one of the select few in the industry who can expertly blend Crypto, game development, international marketing, and mini-game creation and distribution within instant messaging platforms.
* In addition, our team has a deep understanding of both the TON and Telegram ecosystems. We have played an active role in supporting and advancing more than 40 Web3 projects through incubation, promotion, development, and operations. This extensive experience has allowed us to accumulate a wide range of resources in the Web3 space.

## Core Member

<table data-view="cards"><thead><tr><th></th><th></th><th></th></tr></thead><tbody><tr><td><strong>Roykay</strong></td><td><em><strong>Founder</strong></em></td><td><ul><li>13 years of product &#x26; growth experience in the global market, crypto, Fin-Tech, and game industries.</li><li>Former CEO of NetBoom, the world's No.1 mobile cloud.gaming platform, 5x ahead of No. 2 (Google) and No. 3 (Nvidia). Former VP of QuantGroup, a leading Fin-Tech platform based on Al &#x26;Big Data.</li></ul></td></tr><tr><td><strong>Sally</strong></td><td><em><strong>Developer Success</strong></em></td><td><ul><li>15 years of experience in developer ecosystem construction and game industry.</li><li>Former VP of gfan.com, VP of 360.cn, GM Assistant of Perfect World.</li></ul></td></tr><tr><td><strong>Alex</strong></td><td><em><strong>Product &#x26; Development</strong></em></td><td><ul><li>6 years of software development and product experience, former Technical Product Manager at Amazon.</li><li>Master degree in Computer Science from Stevens Institute of Technology.</li></ul></td></tr><tr><td><strong>Leo</strong></td><td><em><strong>Marketing &#x26; Operation</strong></em></td><td><ul><li>Community operation and influencer marketing expert. Former Marketing Director of NetBoom.</li><li>Graduated from the University of Maryland, and Peking University.</li></ul></td></tr><tr><td><strong>Bush</strong></td><td><em><strong>Business Development</strong></em></td><td><ul><li>7 years experience in the eSports and Crypto industry, serial entrepreneur</li><li>Former Event Manager of Gerena.</li><li>Graduated from St.Cloud State University.</li></ul></td></tr></tbody></table>


# Community

## Community is The Most Effective for Discovering Good Games

The law of social operation tells us that the most effective help for most people to make choices is passed on by others, especially in the transmission of cultural and entertainment information.&#x20;

A good reputation and recommendations from real players are more meaningful than individual centralized reviews.

## Community Mechanism

**MiniTon** mainly draws on the valuable experience of Discord from the United States, Douban and TapTap from China. The core mechanism of the entire community is as follows:

### **Mechanism #1** <a href="#ji-zhi-yi" id="ji-zhi-yi"></a>

**Use decentralized \<player evaluation> and \<performance data> monitored by cloud game technology to jointly measure a \<game quality>. \<Game Quality> determines the ranking and exposure of the game.**

#### **Player Evaluation**

* **MiniTon** believes in the power of the masses, the judgment of the majority, and the wisdom of numbers. The community adopts decentralized autonomous management. All game content, UGC content, classification, screening, and ranking are generated and determined by players holding $**MTC**. Give a comment "useful," and its ranking will automatically rise; post "my daughter's favorite" to a game, and it will appear in the label category of the entire community.
* Players who have experienced the game and have a ve$MTC can evaluate the game. By staking $MTC, players can comment on the game, score, mark "expected", "recommended" or "not recommended", etc.
* The community is composed of players, developers, and media professionals. It produces new game information and high-quality UGC discussion content to attract players to communicate here. By staking $MTC, players can "excite" or "deduct points" for each piece of UGC content. UGC content can better reflect the effectiveness of the content through majority voting.
* For new games that have not yet been launched, by staking $MTC, players can use functions such as "new game reservation" and "game test" to experience new games, post reviews, and promote game improvements for the first time. Games without \<performance data> also have a chance to get an initial evaluation.
* The community strictly governs robots and the shillers. The founding team formulated the relevant rules early and then continuously optimized through the joint voting of community players to ensure that player evaluations were authentic evaluations.
* Player evaluation behavior and UGC creation behavior are the fundamental behaviors on which the community depends. Therefore, the tokenomic has focused on relevant investment to motivate players' related behaviors.

#### **Game Performance Data**

* The algorithm will focus on \<number of players>, \<experience conversion rate>, \<experience duration>, \<retained data>, \<crash rate>, and \<return rate>. These indicators have been widely used in traditional games and are recognized as an objective and quantitative indicator of how fun a game is.
* To prevent deception, the community uses cloud gaming technology to monitor the authenticity of game performance data.

### **Mechanism #2**

Make it easier for good games to gain exposure and more revenue, and encourage good developers to create more good games. Game content recommended based on and will receive more exposure and support from MiniTon:&#x20;

#### Token Grant

* Free to get $MTC support for game token swap.&#x20;

#### Traffic Grant

* Get free traffic exposure. This traffic recommendation strategy uses TikTok’s traffic pool algorithm.


# DAO Governance

Through decentralized governance design, MiniTon is bound to be better.

{% hint style="info" %}
We plan to transfer MiniTon's governance rights to the DAO governance model once these criteria are met:

* [ ] The project achieves a user base of 50 million.
* [ ] The project's business model is substantiated with evidence of sustainability, marked by consistent revenue growth and profitability.
* [ ] All the functional design outlined in this white paper is successfully implemented.
* [ ] A minimum of 50% of the tokens allocated for distribution to investors and teams has been released.
  {% endhint %}

Before fully transitioning to the DAO governance model, MiniTon will conduct experiments and explorations related to DAO governance.

## Sub-DAOs in Multiple Forms

All current centralized guilds, communities, and clubs can gradually transition into a DAO.

**MiniTon** will provide support to the decentralization progress to all the above organizations.

All of the guilds and DAOs will become sub-DAOs of **MiniTon** after joining **MiniTon**.

**MiniTon** will become a collection of sub-DAOs and these sub-DAOs will be the cells of **MiniTon**.

## Provide Technical Support to Sub-DAOs

**MiniTon** will provide support for the transformation of traditional centralized organizations to DAO. The **MiniTon** community is the product that will support the DAOs from the beginning.

The **MiniTon** community carries the relationship and communications among members.

**MiniTon** will provide convenient and effective DAO governance modules for all sub-DAOs, such as NFT, proposal function, voting function, publicity function, etc.

## The Governance of DAO and Sub-DAO in **MiniTon**

**MiniTon**'s DAO governance is participated by all users holding tokens and sub-DAOs.&#x20;

The governance of the sub-DAOs is governed by the users holding tokens within the sub-DAOs.

Players can make adjustments and vote on all the product designs, operation strategies, and rules in **MiniTon**, through **staking $MTC**.

**MiniTon** involves the maintenance of multiple relationships, including guilds, players, investors, and game developers.&#x20;

In order to maintain a balance of relationships, **all members holding $MTC can participate in the governance decisions of MiniTon**, which believes in the power of the people, the judgment of the majority, and the wisdom of numbers.&#x20;

**MiniTon** utilizes several algorithms and smart contract rules internally. By decentralizing governance and allowing players to exercise voting rights on key decisions, many rules can be made beneficial for more content to emerge and more users to participate. Some of the key algorithmic rules, for example, are:

* Player matching algorithm&#x20;
* Player skill rating algorithm&#x20;
* Anti-cheating algorithm&#x20;
* Final Evaluation Scoring Algorithm for Game Quality&#x20;
* A Dynamic Relational Algorithm for Game Quality and Ranking&#x20;
* New games get marketing-backed traffic pool algorithms&#x20;
* Algorithm for earning rewards for players after content creation and evaluation


# MiniTon Developer Documentation


# Set Up Core Loop & Gameplay

## Overview

Below, we walk your through the core elements of setting up your core loop and gameplay on MiniTon. Beginning with starting a match, reporting a score and eventually getting back to the MiniTon BOT. By the end of this article, you will have a complete core loop allowing you to fully test a standard MiniTon match.

## Launching Your Gameplay

When MiniTon launches, it will take control of the user experience. The player will start a match and MiniTon will notify the game. At this point, control is given back to your game to start the match gameplay. The examples below illustrate how to handle starting a match.

{% tabs %}
{% tab title="Unity/C#" %}
You should have previously implemented the `MiniTon Manager`. The `OnMatchWillBegin` extra logic function specified in the `MiniTonManager` can be used to:

1. Clear any previously stored match settings
2. Retrieve the Match object and utilize it to set gameplay parameters
3. Load your game scene, if you have specified a `Game Scene` in the `MiniTon Manager`.

{% code title="ExtraLogic.cs" %}

```csharp
// ...
    public void OnMatchWillBeginExtraLogic(Match matchInfo) {
        //Extra Logic Here
    }
// ...
```

{% endcode %}
{% endtab %}

{% tab title="JavaScript" %}
You should have previously implemented the MiniTon Manager. The `OnMatchWillBegin` extra logic function specified in the MiniTonManager can be used in JavaScript as follows:

{% code overflow="wrap" %}

```javascript
// Assuming you have an instance of MiniTonManager and a matchInfo object
// This function should be called when the match is about to begin
function onMatchWillBeginExtraLogic(matchInfo) {
    // Extra Logic Here
    // Clear any previously stored match settings
    // Retrieve the Match object and utilize it to set gameplay parameters
    // Load your game scene if you have specified a Game Scene in the MiniTon Manager
}

// Usage example
const MiniTonManager = new MiniTonManager(); // Replace with actual initialization code
const matchInfo = getMatchInfo(); // Replace with code to retrieve match info

onMatchWillBeginExtraLogic(matchInfo);
```

{% endcode %}

The `onMatchWillBeginExtraLogic` function should be called when the match is about to begin, and you can implement your extra logic inside it.
{% endtab %}
{% endtabs %}

## Completing Gameplay

### Submit Score

To ensure that both asynchronous and synchronous gameplay proceeds optimally, the score for the match should be submitted immediately using `SubmitScore` when the match ends, regardless of any remaining player input necessary to reach the match results screen. The score submission should be handled in the background without any explicit action by the player necessary to proceed.

The `SubmitScore` method is expecting three values - a score as well as Success and Failure Callbacks.

{% tabs %}
{% tab title="Unity/C#" %}
You should report the final score from a script that controls your game scene&#x20;

{% code title="logic.GameManager.cs" %}

```csharp
using MiniTon;
using UnityEngine;

public class GameManager : MonoBehaviour
{
    void SubmitScore() {
        MiniTonCrossPlatform.SubmitScore(GetScore(), Success, Failure);
    }

    void Success() {
        Debug.Log("Success");
        //Return to the MiniTon
    }

    void Failure(string reason) {
        Debug.LogWarning("Fail: " + reason);
        //Fallback score submission
    }
}
```

{% endcode %}
{% endtab %}

{% tab title="JavaScript" %}
To achieve optimal gameplay flow in JavaScript for both asynchronous and synchronous gameplay, you can submit the match score immediately using the `SubmitScore` method when the match ends, without requiring explicit player input to proceed. The `SubmitScore` method expects three values: the score, a success callback, and a failure callback.

You should report the final score from a script that controls your game scene logic.

{% code overflow="wrap" %}

```javascript
// Assuming you have a MiniTon object initialized
// This function should be called when the match ends
function submitScore() {
    const score = getScore(); // Replace with your score calculation logic

    MiniTon.SubmitScore(score, successCallback, failureCallback);
}

// Success callback function
function successCallback() {
    console.log("Success");
    // Return to the MiniTon or perform any other necessary actions
}

// Failure callback function
function failureCallback(reason) {
    console.warn("Fail: " + reason);
    // Implement a fallback score submission or handle the failure as needed
}

// Usage example
// Call submitScore() when your game match ends
submitScore();

```

{% endcode %}

In this JavaScript version, you should replace `getScore()` with your actual score calculation logic and ensure that you have a MiniTon object initialized. The `submitScore` function should be called when the match ends, and it will trigger the appropriate success or failure callbacks based on the result of the score submission.
{% endtab %}
{% endtabs %}

> #### Note on Progression
>
> After submitting a score, you have the opportunity to present the player with a granular score breakdown and an opportunity to allow the player to view their game progression. Setup for this is detailed further in the Progression Overview.

### Return To The MiniTon BOT

The `ReturnToMiniTon` method exits your gameplay scene and presents the MiniTon BOT. This must be called **after** the score has been successfully submitted with the `SubmitScore` method. After `SubmitScore` has been called, you can present users with high scores or progression systems to enhance the game experience before ultimately calling the `ReturnToMiniTon` method and loading the MiniTon BOT.&#x20;

In all cases, it will return true or false, depending on whether or not it is able to return the user to MiniTon. For the case of a match in progress, unless a score has been submitted, this method will return false and the user will not be returned to MiniTon. If a score has been submitted, it returns true and returns the user to MiniTon.

{% tabs %}
{% tab title="Unity/C#" %}
The ReturnToMiniTon method provides flexibility on how to hand the end of the match behavior.&#x20;

{% code title="GameManager.cs" %}

```csharp
using MiniTon;
using UnityEngine;

public class GameManager : MonoBehaviour
{
    void SubmitScore() {
        MiniTonCrossPlatform.SubmitScore(GetScore(), Success, Failure);
    }

    void Success() {
        Debug.Log("Success");
        MiniTonCrossPlatform.ReturnToMiniTon();
    }

    void Failure(string reason) {
        Debug.LogWarning("Fail: " + reason);
        //Fallback score submission
    }
}
```

{% endcode %}
{% endtab %}

{% tab title="JavaScript" %}
`ReturnToMiniTon` method is called to handle the end of the match, you can use the following code:

{% code overflow="wrap" %}

```javascript
// Assuming you have a MiniTon object initialized
// This function should be called when the match ends and you want to return to MiniTon
function returnToMiniTon() {
    MiniTon.ReturnToMiniTon();
}

// Success callback function
function successCallback() {
    console.log("Success");
    returnToMiniTon(); // Call the returnToMiniTon function when the match is successful
}

// Failure callback function
function failureCallback(reason) {
    console.warn("Fail: " + reason);
    // Implement a fallback score submission or handle the failure as needed
}

// Submit the score using MiniTon
function submitScore() {
    const score = getScore(); // Replace with your actual score calculation logic

    MiniTon.SubmitScore(score, successCallback, failureCallback);
}

// Usage example
// Call submitScore() when your game match ends
submitScore();

```

{% endcode %}

In this JavaScript version, you should replace `getScore()` with your actual score calculation logic, and ensure that you have a MiniTon object initialized.
{% endtab %}
{% endtabs %}

### Fallback Score Reporting

> #### Please Note:
>
> **ReportFinalScore** has been deprecated and replaced by the **DisplayTournamentResultsWithScore** method.

The primary method for reporting a score to MiniTon is through the methods defined above `SubmitScore` and `ReturnToMiniTon`. However, **DisplayTournamentResultsWithScore should always be implemented as a fallback in the event that the SubmitScore method fails.** This best practice ensures your user’s scores will never be lost. This method submits the player score, then immediately returns the user to the MiniTon.

Ensure that calling this method as fallback will prevent any pending/in-progress SubmitScore calls from triggering a new retry after the user returns to MiniTon. If you do not do this, the pending retry may execute in a new game and you could end up submitting a previous game’s score.

{% tabs %}
{% tab title="Unity/C#" %}
{% code title="GameManager.cs" %}

```csharp
using MiniTon;
using UnityEngine;

public class GameManager : MonoBehaviour
{
    void SubmitScore() {
        MiniTonCrossPlatform.SubmitScore(GetScore(), Success, Failure);
    }

    void Success() {
        Debug.Log("Success");
        MiniTonCrossPlatform.ReturnToMiniTon();
    }

    void Failure(string reason) {
        Debug.LogWarning("Fail: " + reason);
        MiniTonCrossPlatform.DisplayTournamentResultsWithScore(GetScore());
    }
}
```

{% endcode %}
{% endtab %}

{% tab title="JavaScript" %}
{% code overflow="wrap" %}

```javascript
// Assuming you have a MiniTon object initialized
// This function should be called when you want to submit the score
function submitScore() {
    const score = getScore(); // Replace with your actual score calculation logic

    MiniTon.SubmitScore(score, successCallback, failureCallback);
}

// Success callback function
function successCallback() {
    console.log("Success");
    returnToMiniTon(); // Call the returnToMiniTon function when the match is successful
}

// Failure callback function
function failureCallback(reason) {
    console.warn("Fail: " + reason);
    displayTournamentResultsWithScore(getScore()); // Call the displayTournamentResultsWithScore function on failure
}

// Function to return to MiniTon
function returnToMiniTon() {
    MiniTon.ReturnToMiniTon();
}

// Function to display tournament results with the score
function displayTournamentResultsWithScore(score) {
    MiniTon.DisplayTournamentResultsWithScore(score);
}

// Function to get the score (replace with your actual score calculation logic)
function getScore() {
    return 100; // Replace with the actual score value
}

// Usage example
// Call submitScore() when your game match ends
submitScore();
```

{% endcode %}
{% endtab %}
{% endtabs %}

### Incomplete Matches

There are a couple ways to end a match prematurely. First, you can allow the user to quit the game and submit their current score, which gives them an opportunity to win with the score they have. Second, you can abort them from a match, which will result in a loss.Depending on your specific gameplay, you will need to determine which method works best for you.

#### **Aborting**

Aborting a match is an alternative to reporting the final score. When a player aborts a match, they have forfeited it to the opponent.

{% tabs %}
{% tab title="Unity/C#" %}

```csharp
MiniTonCrossPlatform.AbortMatch();
```

{% endtab %}

{% tab title="JavaScript" %}

```javascript
// Assuming you have a MiniTonCrossPlatform object initialized
// This function should be called when you want to abort the match
function abortMatch() {
    MiniTonCrossPlatform.AbortMatch();
}

// Usage example
// Call abortMatch() when you want to abort the match
abortMatch();
```

{% endtab %}
{% endtabs %}

### Ending Replay

Many cash matches are recorded in order to allow players to view replays as well as allow MiniTon to monitor fair play. The SDK provides an option that will allow you to end the replay after successfully submitting scores before progressing. This prevents unnecessarily long replays when the players interact with other gameplay elements like Progression. If you choose not to manually end the replay, the replay will end when the game returns to the MiniTon.

You might want to consider supporting this feature in your game to allow users more control to conserve on resources i.e. battery, network etc.

> If you invoke this method before calling SubmitScore a value of `false` will be returned. It is always recommended, to submit the player score as soon as the match gameplay ends, if possible.

{% tabs %}
{% tab title="Unity/C#" %}

```csharp
bool success = MiniTonCrossPlatform.EndReplay();
```

{% endtab %}

{% tab title="JavaScript" %}
{% code overflow="wrap" %}

```javascript
// Assuming you have a MiniTonCrossPlatform object initialized
// This function should be called when you want to end the replay
function endReplay() {
    const success = MiniTonCrossPlatform.EndReplay();
    return success; // Return the success value if needed
}

// Usage example
// Call endReplay() when you want to end the replay
const replayEndedSuccessfully = endReplay();
```

{% endcode %}
{% endtab %}
{% endtabs %}


# Random and Fairness

Random numbers can be essential to many different types of games. However, it also causes fairness concerns when playing in MiniTon tournaments. In order to address the potential imbalance caused by random numbers, the MiniTon SDK has methods to generate random numbers; the numbers returned by MiniTon are in the same sequence for each player in a match.

> The MiniTon random generator ensures that each competitor in a match receives the exact sequence of *random* values to maintain fairness.

### API Methods

This lists the most commonly used methods. [View the exhaustive list here](/developer-success/miniton-developer-documentation/api-reference#random-value).

{% tabs %}
{% tab title="Unity/C#" %}

```csharp
MiniTonCrossPlatform.Random.Value()
```

**Returns**

A generated pseudo random float value

***

```csharp
MiniTonCrossPlatform.Random.Range(float min, float max)
```

**Parameters**

`min` The minimum float value of the range

`max` The maximum float value of the range

**Returns**

A generated pseudo random float value within the range given

> The Random function `Range(float min, float max)` requires the min and max value range (max-min) to be no larger than `Float.MaxValue` to prevent overflow.

***

```csharp
MiniTonCrossPlatform.Random.Range(int min, int max)
```

**Parameters**

`min` The minimum int value of the range

`max` The maximum int value of the range

**Returns**

An int value within the range given

> The Random function `Range(int min, int max)` requires the min and max value range (max-min) to be no larger than `Int.MaxValue` to prevent overflow.
> {% endtab %}

{% tab title="JavaScript" %}
To provide the equivalent functionality in JavaScript for generating a pseudo-random float value using `MiniTonCrossPlatform.Random.Value()`, you can use the following JavaScript code:

{% code overflow="wrap" %}

```javascript
// Assuming you have a MiniTonCrossPlatform object initialized with a Random module
// This function returns a generated pseudo-random float value between 0 (inclusive) and 1 (exclusive)
function getRandomFloat() {
    return MiniTonCrossPlatform.Random.Value();
}

// Usage example
const randomValue = getRandomFloat();
console.log("Random Float Value:", randomValue);

```

{% endcode %}

The `getRandomFloat` function returns a pseudo-random float value, and you can use it in your game as needed. The code generates a float value between 0 (inclusive) and 1 (exclusive).

***

To provide the equivalent functionality in JavaScript for generating a pseudo-random float value within a specified range using `MiniTonCrossPlatform.Random.Range(min, max)`, you can use the following JavaScript code:

{% code overflow="wrap" %}

```javascript
// Assuming you have a MiniTonCrossPlatform object initialized with a Random module
// This function generates a pseudo-random float value within the specified range [min, max)
function getRandomFloatInRange(min, max) {
    if (max - min > Number.MAX_VALUE) {
        console.warn("Range too large. Maximum allowed range is Number.MAX_VALUE.");
        return null; // Handle the error as needed
    }

    return min + (max - min) * Math.random();
}

// Parameters
const min = 0.0; // Replace with your desired minimum value
const max = 1.0; // Replace with your desired maximum value

// Usage example
const randomValueInRange = getRandomFloatInRange(min, max);
console.log("Random Float Value in Range:", randomValueInRange);
```

{% endcode %}

In this JavaScript version, you should have a `MiniTonCrossPlatform` object initialized with a Random module. The `getRandomFloatInRange` function generates a pseudo-random float value within the specified range \[min, max). It also includes a check to ensure that the range does not exceed the maximum allowed value to prevent overflow, as mentioned in your documentation.

You can customize the `min` and `max` parameters according to your desired range, and the `randomValueInRange` variable will hold the generated random float value within that range.

***

To provide the equivalent functionality in JavaScript for generating a pseudo-random integer value within a specified range using `MiniTonCrossPlatform.Random.Range(min, max)` with integer parameters, you can use the following JavaScript code:

{% code overflow="wrap" %}

```javascript
// Assuming you have a MiniTonCrossPlatform object initialized with a Random module
// This function generates a pseudo-random integer value within the specified range [min, max]
function getRandomIntInRange(min, max) {
    if (max - min > Number.MAX_SAFE_INTEGER) {
        console.warn("Range too large. Maximum allowed range is Number.MAX_SAFE_INTEGER.");
        return null; // Handle the error as needed
    }

    // Generate a random integer within the range [min, max]
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

// Parameters
const min = 0; // Replace with your desired minimum value
const max = 100; // Replace with your desired maximum value

// Usage example
const randomIntInRange = getRandomIntInRange(min, max);
console.log("Random Integer Value in Range:", randomIntInRange);
```

{% endcode %}

In this JavaScript version, you should have a `MiniTonCrossPlatform` object initialized with a Random module. The `getRandomIntInRange` function generates a pseudo-random integer value within the specified range \[min, max]. It includes a check to ensure that the range does not exceed the maximum allowed safe integer value to prevent overflow, as mentioned in your documentation.

You can customize the `min` and `max` parameters according to your desired integer range, and the `randomIntInRange` variable will hold the generated random integer value within that range.
{% endtab %}
{% endtabs %}

### Considerations

Please be aware that use of the MiniTon random methods does not guarantee that all players will have an identical game experience. These methods can only ensure that players get the same sequence of random numbers. Over time, the player’s decisions may diverge and the same random number will not be used in the same place.There may be places where the random decision is trivial to the outcome of the game, or purely aesthetic; in that case we recommend you do not use the MiniTon random methods to reduce the chances of making a different number of calls between players.

### Ensure Players Cannot Obtain Advantages from Outside the Game

With the potential for real money to be awarded to one player or another, be certain that players won’t have any edge based on factors outside the tournament they are playing. Examples of this include items obtained from in-app purchases or bonuses gained from playing in single-player mode. This is highly specific to each individual game, but if there are any ways for players to obtain in-game bonuses these should be disabled when playing with MiniTon.


# Setting up Tournaments and Gameplay Parameters

Tournaments and gameplay parameters allow you to further customize your game on MiniTon. Tournaments allow you to specify the types of matches your game offers, while gameplay parameters can be used to alter the runtime behavior of your game.

### Tournaments

MiniTon offers you the ability to set up several different types of tournaments through which players can compete for virtual points or cash. You can set up Tournaments in the MiniTon Developer Console.

### How Tournaments Work

In MiniTon, tournaments are either **asynchronous** (what we call Play and Compare) or **Real-Time Synchronous**.&#x20;

Play and Compare tournaments are asynchronous. This means players do not have to wait to be matched with another person and compete in real-time. Instead, any time a player enters a tournament they will immediately be put into a game. Their score will be recorded and matched against another player with a similar rating. If a match isn’t immediately found, MiniTon will hold on to that player’s score and wait for another player with matching skills to enter the same tournament.&#x20;

In Real-Time Synchronous tournaments, players are matched with another person and compete in real time. Any time a player enters a tournament they must wait for another player to enter before being put into a game. Each player will see the opponent's progress in real time, and aborting will immediately end the tournament.

### Types of Tournaments

#### Head-to-Head Tournaments

These are the “standard” type of tournament, pitting two players directly against each other in a winner-take-all competition. Most MiniTon games implement this kind of tournament, and they’re the best kind when still in the process of building up your player population.

#### Multiple Player Tournaments

In Multiple Player tournaments, you can have four players compete for the best score in the game. As in Head to Head, a lone winner takes all of the proceeds. These tournaments are best suited for games with large player populations, as more players are needed to fill in these games. If your game supports standard tournaments, then it already supports Multiple Player tournaments as well! The differences between the two are all managed by MiniTon.

#### Bracket Tournaments

In Bracket Tournaments, a group of players will compete in a series of rounds. The loser of each round is eliminated and the winner proceeds to compete against other winners. This continues until only one remains. These tournaments are best suited for games with large player populations, as more players are needed to fill in these games. If your game supports standard tournaments, then it already supports Bracket tournaments as well! The differences between the two are all managed by MiniTon.

#### Cash or Virtual Currency Tournaments

Players in MiniTon tournaments can choose between competing for MiniTon Virtual Currency (known as 'Point') or for real money or for Toncoin. While 'Point' may be used for certain in-MiniTon purchases, only Toncoin and cash can be withdrawn from the system.

### Creating Tournaments

MiniTon starts you off with a default set of 6 Head-to-Head tournaments, 3 Cash tournaments, and 3 Virtual Currency tournaments. Having a large number of tournaments creates a negative experience for players when they are unable to match with another player. This leads to tournaments being canceled and players being refunded.&#x20;

Once your game starts to scale and more players join the game, higher prize templates and bracket tournaments are enabled automatically by MiniTon.

### Editing Tournaments

Different tournaments can be configured from your game’s page on the MiniTon Developer Console. There, you can experiment with different tournaments and identify the ones that are most popular with your player base.

{% hint style="info" %}
CAUTION

Once a production build is uploaded to the developer console, all tournament settings will be locked and unable to be changed without the assistance of MiniTon. This is done to prevent fairness issues. Please make sure you are done configuring your templates before uploading a production build. You can request a parameter change by contacting MiniTon.&#x20;
{% endhint %}

You can also customize different types of games by setting up Gameplay Parameters on the MiniTon Developer Console.

### Gameplay Parameters

The MiniTon Developer Console allows you to set up different types of tournaments for your game. Additionally, you can configure each tournament to have specific gameplay parameters. These are essentially key-value pairs that you set up on the MiniTon Developer Console. When a match begins, you can retrieve these parameters.

#### Purpose

So, what's the purpose of setting up gameplay parameters? In essence, gameplay parameters allow you to modify your game's gameplay behavior at runtime. Some examples of gameplay parameters include:

* Size or length of the game
* Level of difficulty and how difficulty increases over time
* Different characters or weapon loadouts
* Points for specific actions
* Bonuses for achievements
* Different game objectives

As you can see, the possibilities are endless. When set up thoughtfully, gameplay parameters can increase user engagement for your game and therefore increase monetization opportunities. If anything, they're an easy way to add excitement and replayability to your game.

#### Setting Up Gameplay Parameters

Gameplay parameters are set up in the MiniTon Developer Console for your game. Please head over there and set some up before attempting to retrieve them from your game.

#### Retrieving Gameplay Parameters

Now that you have gameplay parameters set up, retrieving them is fairly straightforward. When a match begins, MiniTon will send your gameplay parameters as key-value pairs. Each value is sent as a string, so you'll have to convert each value to the desired data type. The examples below retrieve a `TimeLimit` gameplay parameter that is parsed as an integer.

{% hint style="info" %}
INFO

When you parse the parameter strings to floats, make sure to be cognizant of the player’s culture settings so the parser properly handles periods and commas in floats.

For example, in Unity, you can overload the Parse method with `CultureInfo.InvariantCulture` to make the call culture-independent. `float.Parse(".8", CultureInfo.InvariantCulture)`
{% endhint %}

{% tabs %}
{% tab title="Unity/C#" %}
{% code title="MiniTonGameController.cs" %}

```csharp
using MiniTonSDK;
using UnityEngine.SceneManagement;

public sealed class MiniTonGameController : MiniTonMatchDelegate
{
    public void OnMatchWillBegin(Match matchInfo)
    {
        if (matchInfo.GameParams.ContainsKey("TimeLimit"))
        {
            string timeLimitStr = matchInfo.GameParams["TimeLimit"];
            int timeLimit = int.Parse(timeLimitStr);

            // Modify your game's time limit
        }
    }
}
```

{% endcode %}

In this example, `MiniTonGameController` implements the `MiniTonMatchDelegate` interface so that it can be notified when a match is beginning. When that happens, `OnMatchWillBegin()` is called and provides a Match object `matchInfo`. The gameplay parameters are in the `matchInfo.GameParams` property.

You can also retrieve the gameplay parameters at any time during the match by calling `MiniTonCrossPlatform.GetMatchRules()`. More detailed documentation can be found in the API Reference
{% endtab %}

{% tab title="JavaScript" %}
`MiniTonGameController` class that handles gameplay parameters using MiniTonSDK:

```javascript
const MiniTonSDK = {
    // Simulate Match object (replace with actual implementation)
    Match: {
        GameParams: {
            TimeLimit: "60", // Simulated gameplay parameter
            // Add more gameplay parameters as needed
        },
    },
    GetMatchRules: function () {
        return this.Match.GameParams;
    },
};

class MiniTonGameController {
    OnMatchWillBegin(matchInfo) {
        if (matchInfo.GameParams.hasOwnProperty("TimeLimit")) {
            const timeLimitStr = matchInfo.GameParams["TimeLimit"];
            const timeLimit = parseInt(timeLimitStr);

            // Modify your game's time limit based on the retrieved parameter
            console.log("Time Limit:", timeLimit);
        }
    }
}

// Usage example
const miniTonGameController = new MiniTonGameController();
const matchInfo = MiniTonSDK.Match;
miniTonGameController.OnMatchWillBegin(matchInfo);

```

The `MiniTonGameController` class implements the logic for handling gameplay parameters when a match begins. The `OnMatchWillBegin` method checks if the "TimeLimit" parameter exists in the `matchInfo.GameParams` property and modifies the game's time limit based on the retrieved parameter.

You can use the `MiniTonSDK.GetMatchRules()` function to retrieve gameplay parameters at any time during the match.
{% endtab %}
{% endtabs %}


# Implement Progression

The Progression methods allow you to store, recall, and update player data at any time within the game, unlocking personalized player experiences.&#x20;

### General Custom Progression Game Scene Flow

1. Create keys in Developer Console for `PlayerData and/or InGameItems namespaces`
2. From client, retrieve player data using GetProgressionUserData at any time, prior, during, or at end of match play
3. Call SubmitScore at the conclusion of the match
4. Call UpdateProgressionUserData to update player data
5. Present the player with the custom progression scene
6. Call ReturnToMiniTon to return to the MiniTon BOT

### Progression API

#### Namespaces

There are three namespaces used to segment Progression data:

* **`DefaultPlayerData`**
  * For read-only player data and is game-specific. Keys such as `games_played`, `games_won`, `install_date,` and more are found here.
* **`PlayerData`**
  * For player data and is game specific. Store and retrieve custom player statistics and other custom progression-related data here.
* **`InGameItems`**
  * In-game items are shared across all games in the publisher's portfolio. Store and retrieve virtual goods and global custom progression-related data here.

{% hint style="info" %}
INFO

In order to store data in the **PlayerData** and **InGameItems** namespaces, you must first create your custom keys via the MiniTon Developer Console. Remember to publish your keys to Production when you are ready to distribute your game builds that contain Progression.
{% endhint %}

#### Get Progression User Data

Retrieve data for the current user. The GetProgressionUserData method requires `callback` methods that allow you to handle success and fail scenarios.

{% tabs %}
{% tab title="Unity/C#" %}
{% code overflow="wrap" %}

```csharp
public static void MiniTonCrossPlatform.GetProgressionUserData(string progressionNamespace, List<string> userDataKeys, Action<Dictionary<string, ProgressionValue>> successCallback, Action<string> failureCallback)
```

{% endcode %}

**Parameters**

`progressionNamespace` One of the namespace string constants

* **`ProgressionNamespace.PLAYER_DATA`**
* **`ProgressionNamespace.DEFAULT_PLAYER_DATA`**
* **`ProgressionNamespace.IN_GAME_ITEMS`**

`userDataKeys` String key list of desired fields.

`successCallback` Action delegate to handle successful callback. The method must be defined in the implementation.

`failureCallback` Action delegate to handle failed callback. The method must be defined in the implementation.

**Sample Implementation**

{% code title="MatchController.cs" overflow="wrap" %}

```csharp
using MiniTonSDK;
using UnityEngine;
using System;

public class MatchController : MonoBehaviour

    // Define list of keys to look up within the target namespace
    List<String> keys = new List<String>()
    {
        "games_played",
        "games_won",
        "average_score"
    };

    // Handle success response
    void OnReceivedData(Dictionary<string, MiniTonSDK.ProgressionValue> data)
    {
        Debug.LogWarning("Success");
        // Do something with the data, such as populate a custom Progression scene

        // Example manipulation of the returned data
        // Printing each key/value to console
        foreach(var kvp in data)
            Debug.LogWarning("Progression default player data key: " + kvp.Key + ", value: " + kvp.Value.Value);
    }

    // Handle failure response
    void OnReceivedDataFail(string reason)
    {
        Debug.LogWarning("Fail: " + reason);
        // Continue without Progression data
    }

    public void GetData()
    {
        MiniTonCrossPlatform.GetProgressionUserData(ProgressionNamespace.DEFAULT_PLAYER_DATA, keys, OnReceivedData, OnReceivedDataFail);
    }
```

{% endcode %}
{% endtab %}

{% tab title="JavaScript" %}
For retrieving progression user data using the `MiniTonCrossPlatform.GetProgressionUserData` method, you can use the following JavaScript code:

```javascript
// Define the ProgressionNamespace constants
const ProgressionNamespace = {
    PLAYER_DATA: "PlayerData",
    DEFAULT_PLAYER_DATA: "DefaultPlayerData",
    IN_GAME_ITEMS: "InGameItems"
};

// Simulate MiniTonCrossPlatform and Action delegates (replace with actual implementation)
const MiniTonCrossPlatform = {
    GetProgressionUserData: function (progressionNamespace, userDataKeys, successCallback, failureCallback) {
        // Simulate data retrieval (replace with your actual logic)
        const userData = {
            // Simulated data for demonstration purposes
            games_played: 10,
            games_won: 5,
            install_date: "2023-01-01",
            // Add more key-value pairs as needed
        };

        // Simulate success or failure callback (replace with your actual logic)
        if (userData) {
            successCallback(userData);
        } else {
            failureCallback("Failed to retrieve user data");
        }
    }
};

// Usage example
const progressionNamespace = ProgressionNamespace.PLAYER_DATA;
const userDataKeys = ["games_played", "games_won", "install_date"];

function handleSuccess(userData) {
    console.log("User Data:", userData);
    // Implement your logic to handle the retrieved user data here
}

function handleFailure(reason) {
    console.error("Error:", reason);
    // Implement your logic to handle the failure here
}

MiniTonCrossPlatform.GetProgressionUserData(progressionNamespace, userDataKeys, handleSuccess, handleFailure);

```

\
We define the `ProgressionNamespace` constants and simulate the `MiniTonCrossPlatform` object and Action delegates for demonstration purposes.&#x20;

The usage example demonstrates how to call `MiniTonCrossPlatform.GetProgressionUserData` with the specified progression namespace, user data keys, success callback, and failure callback.

For retrieving Progression user data using the MiniTonSDK, sample implementation:

```javascript
const MiniTonSDK = {
    GetProgressionUserData: function (progressionNamespace, userDataKeys, successCallback, failureCallback) {
        // Simulate data retrieval (replace with your actual logic)
        const userData = {
            // Simulated data for demonstration purposes
            games_played: { Value: 10 },
            games_won: { Value: 5 },
            average_score: { Value: 75.5 },
            // Add more key-value pairs as needed
        };

        // Simulate success or failure callback (replace with your actual logic)
        if (userData) {
            successCallback(userData);
        } else {
            failureCallback("Failed to retrieve user data");
        }
    },
};

// Simulate Unity's Debug class (replace with actual implementation if applicable)
const Debug = {
    LogWarning: function (message) {
        console.warn(message);
    }
};

// Define list of keys to look up within the target namespace
const keys = ["games_played", "games_won", "average_score"];

// Handle success response
function onReceivedData(data) {
    Debug.LogWarning("Success");
    // Do something with the data, such as populate a custom Progression scene

    // Example manipulation of the returned data
    // Printing each key/value to console
    for (const key in data) {
        if (data.hasOwnProperty(key)) {
            const value = data[key].Value;
            console.warn("Progression default player data key: " + key + ", value: " + value);
        }
    }
}

// Handle failure response
function onReceivedDataFail(reason) {
    Debug.LogWarning("Fail: " + reason);
    // Continue without Progression data
}

// Simulate the MatchController behavior (replace with actual implementation)
const MatchController = {
    GetData: function () {
        MiniTonSDK.GetProgressionUserData("DEFAULT_PLAYER_DATA", keys, onReceivedData, onReceivedDataFail);
    },
};

// Usage example
MatchController.GetData();
```

{% endtab %}
{% endtabs %}

#### Update Progression User Data

Write data for the current user. The UpdateProgressionUserData method requires `callback` methods that allow you to handle success and fail scenarios.

{% hint style="info" %}
**INFO**

The **DefaultPlayerData** namespace is read-only, and cannot be used with this method.

**NOTE**

This method can update up to 25 elements per invocation.
{% endhint %}

{% tabs %}
{% tab title="Unity/C#" %}

<pre class="language-csharp" data-overflow="wrap"><code class="lang-csharp"><strong>public void MiniTonCrossPlatform.UpdateProgressionUserData(string progressionNamespace, Dictionary&#x3C;string, object> userDataUpdates, Action successCallback, Action&#x3C;string> failureCallback)
</strong></code></pre>

**Parameters**

`progressionNamespace` One of the namespace string constants

* **`ProgressionNamespace.PLAYER_DATA`**
* **`ProgressionNamespace.IN_GAME_ITEMS`**

`userDataUpdates` Dictionary of key/value pairs to be updated.

`successCallback` Action delegate to handle successful callback. The method must be defined in the implementation.

`failureCallback` Action delegate to handle failed callback. The method must be defined in the implementation.

**Sample Implementation**

<pre class="language-csharp" data-title="MatchController.cs" data-overflow="wrap"><code class="lang-csharp">using MiniTon;
using UnityEngine;

public class MatchController : MonoBehaviour

    // Define list of keys to update
    // Must match keys created in the Developer Console!
    Dictionary&#x3C;String, object> updateDict = new Dictionary&#x3C;String, object>()
    {
        { "achievement_level", 5.5 },
        { "combos_attained", 10 },
        { "character_color", "orange" }
    };
    // Handle success response
    void OnSentDataSuccess()
    {
        Debug.LogWarning("Successfully updated!");
    }

    // Handle failure response
    void OnSentDataFail(string reason)
    {
        Debug.LogWarning("Fail: " + reason);
    }

    void UpdateData()
    {
<strong>MiniTonCrossPlatform.UpdateProgressionUserData(ProgressionNamespace.PLAYER_DATA,updateDict, OnSentDataSuccess, OnSentDataFail);
</strong>    }
</code></pre>

{% endtab %}

{% tab title="JavaScript" %}
For updating Progression user data using the `MiniTonCrossPlatform.UpdateProgressionUserData` method

{% code overflow="wrap" %}

```javascript
const MiniTonCrossPlatform = {
    UpdateProgressionUserData: function (progressionNamespace, userDataUpdates, successCallback, failureCallback) {
        // Simulate data update (replace with your actual logic)
        const updatedUserData = {};

        // Apply updates to the user data (replace with your actual logic)
        for (const key in userDataUpdates) {
            if (userDataUpdates.hasOwnProperty(key)) {
                updatedUserData[key] = userDataUpdates[key];
            }
        }

        // Simulate success or failure callback (replace with your actual logic)
        if (updatedUserData) {
            successCallback();
        } else {
            failureCallback("Failed to update user data");
        }
    },
};

// Simulate Unity's Debug class (replace with actual implementation if applicable)
const Debug = {
    LogWarning: function (message) {
        console.warn(message);
    }
};

// Define the ProgressionNamespace constants
const ProgressionNamespace = {
    PLAYER_DATA: "PlayerData",
    IN_GAME_ITEMS: "InGameItems"
};

// Define the userDataUpdates dictionary with key/value pairs to be updated
const userDataUpdates = {
    games_played: 11,
    games_won: 6,
    average_score: 78.5,
    // Add more key-value pairs as needed
};

// Handle success response
function onSuccess() {
    Debug.LogWarning("User data updated successfully");
    // Implement your logic to handle the successful update here
}

// Handle failure response
function onFailure(reason) {
    Debug.LogWarning("Failed to update user data: " + reason);
    // Implement your logic to handle the failure here
}

// Simulate the MatchController behavior (replace with actual implementation)
const MatchController = {
    UpdateUserData: function () {
        MiniTonCrossPlatform.UpdateProgressionUserData(
            ProgressionNamespace.PLAYER_DATA,
            userDataUpdates,
            onSuccess,
            onFailure
        );
    },
};

// Usage example
MatchController.UpdateUserData();

```

{% endcode %}

`MiniTonCrossPlatform.UpdateProgressionUserData` with the specified namespace, user data updates, success callback, and failure callback to update Progression user data.

**Sample** **Implementation**

{% code overflow="wrap" %}

```javascript
const MiniTonCrossPlatform = {
    UpdateProgressionUserData: function (progressionNamespace, userDataUpdates, successCallback, failureCallback) {
        // Simulate data update (replace with your actual logic)
        const updatedUserData = {};

        // Apply updates to the user data (replace with your actual logic)
        for (const key in userDataUpdates) {
            if (userDataUpdates.hasOwnProperty(key)) {
                updatedUserData[key] = userDataUpdates[key];
            }
        }

        // Simulate success or failure callback (replace with your actual logic)
        if (updatedUserData) {
            successCallback();
        } else {
            failureCallback("Failed to update user data");
        }
    },
};

// Simulate Unity's Debug class (replace with actual implementation if applicable)
const Debug = {
    LogWarning: function (message) {
        console.warn(message);
    }
};

// Define the userDataUpdates dictionary with key/value pairs to be updated
const userDataUpdates = {
    achievement_level: 5.5,
    combos_attained: 10,
    character_color: "orange",
    // Add more key-value pairs as needed
};

// Handle success response
function onSentDataSuccess() {
    Debug.LogWarning("Successfully updated!");
    // Implement your logic to handle the successful update here
}

// Handle failure response
function onSentDataFail(reason) {
    Debug.LogWarning("Fail: " + reason);
    // Implement your logic to handle the failure here
}

// Simulate the MatchController behavior (replace with actual implementation)
const MatchController = {
    UpdateData: function () {
        MiniTonCrossPlatform.UpdateProgressionUserData(
            ProgressionNamespace.PLAYER_DATA,
            userDataUpdates,
            onSentDataSuccess,
            onSentDataFail
        );
    },
};

// Usage example
MatchController.UpdateData();
```

{% endcode %}
{% endtab %}
{% endtabs %}

#### Default Player Data

These are automatically updating, read-only statistics from the MiniTon platform

For use with GetProgressionUserData

{% hint style="info" %}
INFO

Default Player Data values are calculated with completed matches that have a result. In progress games that have not yet matched with another player are excluded, and do not update the values.
{% endhint %}

| Key                   | Data Type | Description                                            |
| --------------------- | --------- | ------------------------------------------------------ |
| games\_played         | Integer   | A count of the games a player has entered              |
| cash\_games\_played   | Integer   | A count of the cash games a player has entered         |
| games\_won            | Integer   | A count of the total games a player has won            |
| cash\_games\_won      | Integer   | A count of the total cash games a player has won       |
| best\_score\_lifetime | Float     | The best score achieved by this player                 |
| average\_score        | Float     | The average of all scores by this player               |
| player\_level         | Integer   | The player’s level for this game                       |
| MiniTon\_level        | Integer   | The player’s global MiniTon level                      |
| install\_date         | Date      | The UTC date and timestamp the user installed the game |

### Progression Room Entry Point

#### Configure Progression Room Entry Point

1. Configure your Entry Point within the Developer Console by clicking on `Progression -> Entry Points`. Be sure to complete all required fields. Hit `Save` to immediately see your room in Sandbox. Publish & Assign is used to share your entry point with your players in production. You can create dynamic text in the Title and Subtitle fields by inserting your progression keys names directly into the input box. Example: You have `${Custom_Key_Name}` challenges remaining!
2. Implement OnProgressionRoomEnter from MiniTonDelegate interface to load your progression scene
3. Call ReturnToMiniTon to return to the MiniTon BOT

#### Implement Progression Room

{% tabs %}
{% tab title="Unity/C#" %}
For Unity, you need to implement the `MiniTonMatchDelegate` interface as a regular C# class. This will be instantiated when launching MiniTon later.

{% code title="MiniTonGameController.cs" overflow="wrap" %}

```csharp
using MiniTonSDK;
using UnityEngine.SceneManagement;

public sealed class MiniTonGameController : MiniTonMatchDelegate
{
    private const string GameSceneName      = "Level1";  // Your game scene name
    private const string StartMenuSceneName = "StartMenu";  // Your menu scene (optional)
    private const string ProgressionSceneName = "PlayerProgress"; // Your progression scene

    public void OnMatchWillBegin(Match matchInfo)
    {
    }

    public void OnMiniTonWillExit()
    {
    }

    public void OnProgressionRoomEnter()
    {
        // Load your progression scene here
        SceneManager.LoadScene(ProgressionSceneName);
    }
}
```

{% endcode %}
{% endtab %}

{% tab title="JavaScript" %}

```javascript
const MiniTonSDK = {
    Match: {
        // Define any properties or methods needed for the match info
    },
};

const SceneManager = {
    LoadScene: function (sceneName) {
        console.log("Loading scene: " + sceneName);
        // Implement your scene loading logic here (e.g., using Unity's SceneManager)
    },
};

class MiniTonGameController {
    constructor() {
        this.GameSceneName = "Level1";  // Your game scene name
        this.StartMenuSceneName = "StartMenu";  // Your menu scene (optional)
        this.ProgressionSceneName = "PlayerProgress"; // Your progression scene
    }

    OnMatchWillBegin(matchInfo) {
        // Implement your logic when the match begins
    }

    OnMiniTonWillExit() {
        // Implement your logic when MiniTon is about to exit
    }

    OnProgressionRoomEnter() {
        // Load your progression scene here
        SceneManager.LoadScene(this.ProgressionSceneName);
    }
}

// Usage example
const miniTonGameController = new MiniTonGameController();
miniTonGameController.OnProgressionRoomEnter();

```

{% endtab %}
{% endtabs %}


# Automatic Difficulty

### About Automatic Difficulty

Automatic Difficulty is a number provided by the MiniTon Tournament Server that is between 1 and 10; this represents a game’s intended difficulty. 1 is the least difficult, while 10 is the most difficult. Automatic Difficulty is completely opt-in via the MiniTon Developer Console.

> Caution:&#x20;
>
> In some game types, changing game difficulty behind the scenes may be confusing or upsetting to players.&#x20;

### Why would I use Automatic Difficulty?

Automatic Difficulty allows games to be equally fun for both beginners and experts, despite their difference in skill level.

With it enabled, the MiniTon Tournament Server will calculate a difficulty value based on the player’s level of skill, which you can then use to adjust the difficulty of your game.

So what scenarios would fit for Automatic Difficulty? For example, say you have a mini golf game. Matches with a lower difficulty value can feature simpler, more straightforward courses. Matches with a higher difficulty value can feature courses which are longer and have more obstacles. Another example is for a first-person shooter. Matches with a lower difficulty value can give the player basic enemies. As difficulty increases, the game can give the player a larger number of enemies with more health.

### How does Automatic Difficulty work?

The (automatic) difficulty value is determined by the MiniTon Tournament Server. As a player wins more matches, his or her player ranking goes up, and the Tournament Server gives that player a higher difficulty value for subsequent games. Conversely, losing more will hurt a player’s ranking, and the Tournament Server will assign a lower difficulty value for the player’s subsequent games.

Players in the same match will always receive the same difficulty level to promote a fair a match.

### Adding Automatic Difficulty to Your Game

Adding Automatic Difficulty to your game involves a few steps. First, you'll have to design your game with a gameplay parameter called `MiniTon_difficulty` in mind. Second, you'll test your game with various values of this parameter during development. And third, you will enable Automatic Difficulty when you upload your game's binary to the MiniTon Developer Console before going live.

#### Add a 'MiniTon\_difficulty' gameplay parameter on the MiniTon Developer Console

At its core, Automatic Difficulty is implemented as a Gameplay Parameter called `MiniTon_difficulty`. This parameter is automatically generated by the MiniTon Tournament Server after you've enabled Automatic Difficulty when uploading your game's binary. However, you should only do this when your game is ready to go live on both MiniTon and the appropriate app store.Until then, we recommend setting a `MiniTon_difficulty` gameplay parameter on the MiniTon Developer Console, and assign it a value of 5 for now. Note that this is just temporary and not required but will provide you a value to test retrieval and implementation of the `MiniTon_difficulty` parameter.

#### Consume the 'MiniTon\_difficulty' Gameplay Parameter in Your Game

Next, you'll need to consume the `MiniTon_difficulty` gameplay parameter in your game, and adjust your game's behavior based on the parameter's value. If the value does not exist, we recommended that you default to a value of 5. This could be because you either have not uploaded your binary to the MiniTon Developer Console yet, did not enable Automatic Difficulty when you uploaded your game's binary, or you did not explicitly set up the parameter for development and testing.

#### Enable Automatic Difficulty Before Going Live

At this point, you have tested your game's behavior with various values of `MiniTon_difficulty`, and you are ready to go live on MiniTon. You are now ready to enable Automatic Difficulty.

1. Delete the `MiniTon_difficulty` gameplay parameter that was manually created on the MiniTon Developer Console. The MiniTon Tournament Server will automatically generate this parameter when Automatic Difficulty is enabled.
2. Upload your game's (production ready) binary to the MiniTon Developer Console. There should be a checkbox to enable Automatic Difficulty. **Make sure that checkbox is checked!**

Congratulations, your game is now set up with Automatic Difficulty!

### Best Practices

If applicable to your game, players on higher difficulties should have the opportunity to earn more points (higher scores) than players on lower difficulties. For example, in an arcade survival shooter, surviving for a minute at difficulty 10 should lead to a significantly higher numeric score than surviving for a minute at difficulty 1. This could mean that higher difficulties contain more enemies to destroy, or that higher difficulties contain tougher enemies that are worth more points.


# Crash Detection via Crashlytics

At MiniTon, we use [Firebase Crashlytics](https://firebase.google.com/docs/crashlytics) for crash reporting. We recommend integrating Crashlytics with your game to identify bugs and crashes more efficiently.[<br>](https://docs.skillz.com/docs/audio-api)


# Anti-Cheating Techniques

When integrating with MiniTon it becomes extremely important to take precautions against potential cheating in a game. To give themselves an unfair advantage, players can use 3rd party tools to modify scores or important gameplay values like health and ammo. To maintain a fair and competitive gameplay experience, we recommend that developers take anti-cheating measures before going live with MiniTon.

### Cheating Through Memory Modification

One technique for cheating involves modifying values in run time memory. Using this technique, it would be possible for a user to modify their score before submitting to MiniTon or to rig gameplay variables, like health or time, to give themselves an unfair advantage.

This technique works by searching memory for known values. For instance, say the player knew the score was 19, he would search the memory space of the application for a value of 19 and this would most likely give him a lot of memory addresses, one of which is the score value. At this point there are probably too many possibilities to accurately modify the score but if he then does something in game to increase your score, say to 20, he can now search for 20 in the memory space and reduce the number of memory addresses that are possible.This process is repeated until the probable addresses for scores are reduced to one. The cheater can now modify that memory address directly and change the score.

We recommend that game developers employ the techniques listed in the following pages. Keep in mind protecting against cheating is never going to be absolute, like most security measures it is about making things more difficult for cheaters. They are not a comprehensive overview of all forms of anti-cheat protection, and you may decide to use other anti-cheat techniques in your app as appropriate. If you suspect players are cheating in your game, please reach out directly to MiniTon and we will work with you to get cheaters out of your game.

### Duplicate and Verify Data

One technique to protect memory from being modified is to duplicate and verify data. The idea is to copy key data into separate variables and then compare the copy to the original, if the two don't match at any point in your game, it's likely that someone is cheating.

This ensures there are at least two places in memory that both have to be modified to cheat.

#### Example Code

{% tabs %}
{% tab title="Unity/C#" %}
{% code overflow="wrap" %}

```csharp
private int score = 0;
private int scoreCheck = 0;

// Make sure score and scoreCheck start at the same number
void Awake()
{
    scoreCheck = score;
}

// Any code that alters the score should also alter the scoreCheck
private void AddScore(int increase)
{
    score += increase;
    scoreCheck += increase;
}

// Accessors just need to return the real score
private int GetScore ()
{
    return score;
}

// Assume this is your in-game function triggered upon
// finishing the game (eg: time runs out, no more moves)
private void GameOver()
{
    if (ConfirmScoreValidity())
    {
        // The score matches the copy, so report it
        MiniTonCrossPlatform.ReportFinalScore(score);
    }
    else
    {
        // Abort the match because suspicious behavior was detected
        MiniTonCrossPlatform.AbortMatch();
    }
}

// Confirms that the score is valid.
private bool ConfirmScoreValidity()
{
    return score == scoreCheck;
}
```

{% endcode %}
{% endtab %}

{% tab title="JavaScript" %}

```javascript
const MiniTonCrossPlatform = {
    ReportFinalScore: function (finalScore) {
        console.log("Reporting final score: " + finalScore);
        // Implement your logic to report the final score to MiniTon
    },
    AbortMatch: function () {
        console.log("Aborting the match due to suspicious behavior");
        // Implement your logic to abort the match
    },
};

class ScoreManager {
    constructor() {
        this.score = 0;
        this.scoreCheck = 0;

        // Make sure score and scoreCheck start at the same number
        this.Awake();
    }

    // Make sure score and scoreCheck start at the same number
    Awake() {
        this.scoreCheck = this.score;
    }

    // Any code that alters the score should also alter the scoreCheck
    AddScore(increase) {
        this.score += increase;
        this.scoreCheck += increase;
    }

    // Accessors just need to return the real score
    GetScore() {
        return this.score;
    }

    // Assume this is your in-game function triggered upon
    // finishing the game (e.g., time runs out, no more moves)
    GameOver() {
        if (this.ConfirmScoreValidity()) {
            // The score matches the copy, so report it
            MiniTonCrossPlatform.ReportFinalScore(this.score);
        } else {
            // Abort the match because suspicious behavior was detected
            MiniTonCrossPlatform.AbortMatch();
        }
    }

    // Confirms that the score is valid
    ConfirmScoreValidity() {
        return this.score === this.scoreCheck;
    }
}

// Usage example
const scoreManager = new ScoreManager();
scoreManager.AddScore(10); // Increase the score (simulated)
scoreManager.GameOver(); // Check and report the final score

```

{% endtab %}
{% endtabs %}

### Obfuscate Data

Another technique to protect memory from being modified is to obfuscate data. Obfuscating or encrypting key data is possible through various means. Before writing to memory, either obfuscate a variable or encrypt it. There are various techniques for achieving this, ranging from a simple XOR to more complex encryption methods. If you are combining this with a duplication technique you could even hash the duplicate and incorporate the hash check into the verify logic.

Obfuscating your data will ensure that it is harder for a cheater to find key variables in memory.

#### Example Code

{% tabs %}
{% tab title="Unity/C#" %}
{% code overflow="wrap" %}

```csharp
private int xorCode = 12345; // USE A DIFFERENT XOR VALUE THAN THIS!
private int score = 0;

// Make sure to xor the initial score
void Awake() {
    score = score ^ xorCode;
}

// Functions and mutators should xor the value before using it, and xor
// the value again before the function exits
private void AddScore(int increase) {
    score ^= xorCode;
    score += increase;
    score ^= xorCode;
}

// Accessors just need to return the xor'd value
private int GetScore () {
    return score ^ xorCode;
}
```

{% endcode %}
{% endtab %}

{% tab title="JavaScript" %}

```javascript
class ScoreManager {
    constructor(xorCode) {
        this.xorCode = xorCode; // Use a different XOR value than this
        this.score = 0;

        // Make sure to XOR the initial score
        this.Awake();
    }

    // Make sure to XOR the initial score
    Awake() {
        this.score = this.score ^ this.xorCode;
    }

    // Functions and mutators should XOR the value before using it,
    // and XOR the value again before the function exits
    AddScore(increase) {
        this.score ^= this.xorCode;
        this.score += increase;
        this.score ^= this.xorCode;
    }

    // Accessors just need to return the XOR'd value
    GetScore() {
        return this.score ^ this.xorCode;
    }
}

// Usage example with a different XOR code
const xorCode = 54321; // Use a different XOR value than this
const scoreManager = new ScoreManager(xorCode);
scoreManager.AddScore(10); // Increase the score (XOR-encoded)
const currentScore = scoreManager.GetScore(); // Retrieve the decoded score
console.log("Current Score:", currentScore);
```

{% endtab %}
{% endtabs %}

### Advanced Data Protection

You can combine the data-duplication and obfuscation techniques for added security. Ideally you should use a different XOR hash for the score and scoreCheck values. That will make it harder for a cheater to notice, otherwise the memory addresses will contain matching values and make it easier to find your checksum.

#### Example Code

{% tabs %}
{% tab title="C#" %}
{% code overflow="wrap" %}

```csharp
using System;

public class ScoreManager
{
    private int xorCode = 12345; // USE A DIFFERENT XOR VALUE THAN THIS!
    private int scoreCheckXorCode = 54321; // USE A DIFFERENT XOR VALUE THAN THIS!
    private int score = 0;
    private int scoreCheck = 0;

    // Make sure to xor the initial values
    public ScoreManager()
    {
        score = score ^ xorCode;
        scoreCheck = scoreCheck ^ scoreCheckXorCode;
    }

    // Functions and mutators should xor the value before using it, and xor the value again before the function exits
    public void AddScore(int increase)
    {
        score ^= xorCode;
        score += increase;
        score ^= xorCode;
        scoreCheck ^= scoreCheckXorCode;
        scoreCheck += increase;
        scoreCheck ^= scoreCheckXorCode;
    }

    // Confirms that the score is valid.
    public bool ConfirmScoreValidity()
    {
        return (score ^ xorCode) == (scoreCheck ^ scoreCheckXorCode);
    }

    public static void Main()
    {
        // Example usage
        ScoreManager scoreManager = new ScoreManager();
        scoreManager.AddScore(10);

        Console.WriteLine("Score is valid: " + scoreManager.ConfirmScoreValidity());
    }
}

```

{% endcode %}
{% endtab %}

{% tab title="JavaScript" %}

```javascript
class ScoreManager {
    constructor(xorCode, scoreCheckXorCode) {
        this.xorCode = xorCode; // Use a different XOR value than this
        this.scoreCheckXorCode = scoreCheckXorCode; // Use a different XOR value than this
        this.score = 0;
        this.scoreCheck = 0;

        // Make sure to XOR the initial values
        this.Awake();
    }

    // Make sure to XOR the initial values
    Awake() {
        this.score = this.score ^ this.xorCode;
        this.scoreCheck = this.scoreCheck ^ this.scoreCheckXorCode;
    }

    // Functions and mutators should XOR the value before using it,
    // and XOR the value again before the function exits
    AddScore(increase) {
        this.score ^= this.xorCode;
        this.score += increase;
        this.score ^= this.xorCode;
        this.scoreCheck ^= this.scoreCheckXorCode;
        this.scoreCheck += increase;
        this.scoreCheck ^= this.scoreCheckXorCode;
    }

    // Confirms that the score is valid.
    ConfirmScoreValidity() {
        return (this.score ^ this.xorCode) === (this.scoreCheck ^ this.scoreCheckXorCode);
    }
}

// Usage example with different XOR codes
const xorCode = 12345; // Use a different XOR value than this
const scoreCheckXorCode = 54321; // Use a different XOR value than this
const scoreManager = new ScoreManager(xorCode, scoreCheckXorCode);
scoreManager.AddScore(10); // Increase the score (XOR-encoded)
const isScoreValid = scoreManager.ConfirmScoreValidity();
console.log("Score is valid:", isScoreValid);
```

{% endtab %}
{% endtabs %}


# Aborted Matches and Forfeits

## Handling Incomplete Games

As players compete in MiniTon games, it is possible for some matches to end with no scores submitted and it is also possible for users to quit matches early where scores may or may not be submitted. There are a variety of scenarios to account for that may depend on your gameplay but this guide should provide some best practices for most situations.

## No Score Submitted

This can happen because of a crash, connection issues, or a player just force-quitting their game. The MiniTon SDK handles these matches by submitting an `abort` score for players. Aborts can occur for various reasons and are all tracked and tagged differently on the backend to ensure proper categorization.

* **Unintentional Crash** - App crash or hardware failure mid-game
* **Backgrounded** - App is backgrounded (if the OS terminates app it is still considered Backgrounded)
* **Terminated** - User terminates app manually
* **Timeout** - User does not submit their score within the allotted time. Also the default abort type recorded if no other information is available

## Player Forfeits

There are two other important ways to handle players not properly submitting a score that should be handled by the game client: **in-game forfeits** and calling the **abort method** (referred to as “Intentional” aborts). The way to handle in-game forfeits comes down to your unique game rules but we have some general items to think about.

### Intentional Forfeits

Created by calling the [abort](/developer-success/miniton-developer-documentation/set-up-core-loop-and-gameplay) method to end the match prematurely.

> In general, you should avoid calling the abort method unless there is no other option. Abort rates should be a direct indicator of game stability and performance so it is important to reduce any noise on your game’s true “abort rate” by handling player-initiated forfeits separately from aborts.

### In-Game Forfeits

Can occur in multiple ways depending on the design of the game - the most common being a user forfeiting through an in-game menu. These should submit a real score, rather than an “abort”. In general, it is a best practice to continually educate the players on the consequences of leaving the game early.

### Asynchronous Games

Typically this should submit whatever score the player has when they forfeit. When handling a player action that will end the match you should first look to report the final score for the player according to the rules of your game.

> Note that if the user has the potential to lower their score while continuing to play, it may be more logical to submit a 0.

### Real-Time Games

We recommend submitting a pre-determined losing score for the forfeiting user, rather than calling the abort method. The losing score should be determined by the win condition for your game and be carefully selected to avoid unintentional “Ties” (i.e. force a 0 for the forfeiting user and 1 for the winner)

> If your game has a score summary screen before returning to the MiniTon SDK, it is best practice to indicate that the opponent Forfeited here, as the MiniTon results screen will show only the losing score value that you assign the forfeiting user.

## Real-Time Games Disconnects

In real-time games, there are more nuances to consider when reporting aborts, especially in the case of disconnections from the game server. Some common use cases and typical ways of handling them are listed below, but these by no means cover all the permutations of disconnect/reconnect use cases.

1. *Pausing gameplay on lost connection*
   * Depending on the design of your game, you may want to pause gameplay when one user loses connection to the game server. For example, in a turn-based game, such as chess, where a user only has a set amount of time to make their move, it would make sense to pause during a reconnect by one user. In real-time strategy games, it can make more sense to allow the opponent to continue playing.
2. *Reconnection timer*
   * If you implement a pause in gameplay while a user disconnects, there should be an associated timer to ensure that the game ends if the user never reconnects. A typical value is 20 seconds to allow for reconnection.
   * As a best practice, many developers implement this timer to be aggregate to prevent griefing/excessive pausing (ie. if a user disconnects and reconnects after 5 seconds, when they disconnect again they should have 5 less total seconds to reconnect in).
   * When one user disconnects and the game is paused, the opponent should see a modal explaining that their opponent has disconnected and showing the current countdown timer. To minimize problems implement the timer in the game server rather than the client to ensure accuracy between the two clients.
3. *Aborting on disconnection*
   * If a user disconnects for longer than the time allotted by the reconnect timer, they should submit an abort and the game should be ended immediately. Their opponent should submit whatever their score currently is and win.
4. *Pause Limiting*
   * If one user pausing the game, using an in-game menu, results in a pause in gameplay for both users, there should be a limit on the amount of times the game can be paused by one user to prevent griefing. If the user pauses more times than is allowed, they should submit a set losing score (typically 0) and the game should immediately end. It is best practice to educate the user on the implications of pausing too often or disconnecting for too long.
5. *Disconnect Limiting*
   * If one user disconnecting from the game server results in a pause in gameplay and impacts the other user, there should be a limit on the amount of times a user can disconnect and reconnect before they are aborted. When this disconnect limit is reached, the game should immediately end with the disconnecting user submitting an abort, and their opponent winning with their current score.
6. *Multiple users Disconnecting*
   * If both users disconnect from the game server at the same time, there should be distinct timers for each user. If both users do not reconnect in the time allotted by the timer, they should both submit aborts.


# API-reference

Unity/C#

### Core Loop

#### Launch MiniTon

This method is overloaded

{% tabs %}
{% tab title="Asynchronous" %}

```csharp
void MiniTonCrossPlatform.LaunchMiniTon();
```

Legacy:

```csharp
void MiniTonCrossPlatform.LaunchMiniTon(MiniTonMatchDelegate matchDelegate);
```

**Parameters**

Legacy: `matchDelegate` A reference to a `MiniTonMatchDelegate` instance that MiniTon will use
{% endtab %}

{% tab title="Synchronous" %}

```csharp
void MiniTonCrossPlatform.LaunchMiniTon();
```

Legacy:

{% code overflow="wrap" %}

```csharp
void MiniTonCrossPlatform.LaunchMiniTon(MiniTonMatchDelegate matchDelegate);
```

{% endcode %}

**Parameters**[**​**](https://docs.skillz.com/docs/api-reference/#parameters-1)

Legacy: `matchDelegate` A reference to a `MiniTonMatchDelegate` instance that MiniTon will use
{% endtab %}
{% endtabs %}

***

#### Update Current Score

Call this method every time the player's score changes during a MiniTon match.

This method is overloaded

{% tabs %}
{% tab title="string" %}

```csharp
void MiniTonCrossPlatform.UpdatePlayersCurrentScore(string score);
```

**Parameters**

`score` The player's current score as a string
{% endtab %}

{% tab title="int" %}

```csharp
void MiniTonCrossPlatform.UpdatePlayersCurrentScore(int score);
```

**Parameters**

`score` The player's current score as a integer
{% endtab %}

{% tab title="float" %}

```csharp
void MiniTonCrossPlatform.UpdatePlayersCurrentScore(float score);
```

**Parameters**

`score` The player's current score as a float
{% endtab %}
{% endtabs %}

***

#### Submit Score

Call this method when a player finishes a match. This will send the score to MiniTon and conclude the match. This will **not** send the user back to the MiniTon BOT

This method is overloaded

{% tabs %}
{% tab title="string" %}
{% code overflow="wrap" %}

```csharp
void MiniTonCrossPlatform.SubmitScore(string score, Action successCallback, Action<string> failureCallback)
```

{% endcode %}

**Parameters**

`score` Player's final score as a string

`successCallback` Implementation of the System.Action delegate that handles successful submission

`failureCallback` Implementation of the System.Action delegate that handles failed submission
{% endtab %}

{% tab title="int" %}

```csharp
void MiniTonCrossPlatform.SubmitScore(int score, Action successCallback, Action<string> failureCallback)
```

**Parameters**

`score` Player's final score as an integer

`successCallback` Implementation of the System.Action delegate that handles successful submission

`failureCallback` Implementation of the System.Action delegate that handles failed submission
{% endtab %}

{% tab title="float" %}

```csharp
void MiniTonCrossPlatform.SubmitScore(float score, Action successCallback, Action<string> failureCallback)
```

**Parameters**

`score` Player's final score as a float

`successCallback` Implementation of the System.Action delegate that handles successful submission

`failureCallback` Implementation of the System.Action delegate that handles failed submission
{% endtab %}
{% endtabs %}

***

#### End Replay

End the current replay if one exists and returns the status of the score submission. Must be called after score has been submitted. Use to end replay recording at conclusion of the match and before user is presented with personalized progression room metrics.

```csharp
bool EndReplay()
```

**Returns**

Boolean true if end replay was successful, false if the user has not submitted a score for the match

***

#### Return to MiniTon

The ReturnToMiniTon method presents the MiniTon BOT. This must be called after the score has been submitted with the SubmitScore method. After the SubmitScore has been called you can present users with relevant statistics such as high score and present content to enhance the game experience.

In all cases, it will return a boolean, indicating whether or not it is able to return the user to MiniTon. For the case of a match in progress, unless a score has been submitted, this method will return false and the user will not be returned to MiniTon. If a score has been submitted, it returns true and returns the user to MiniTon.

```csharp
bool MiniTonCrossPlatform.ReturnToMiniTon()
```

**Returns**

Boolean indicating whether it is able to return the user to MiniTon BOT

***

#### Abort Match

Forfeits the current match and returns to the MiniTon BOT.

```csharp
void MiniTonCrossPlatform.AbortMatch()
```

***

#### Display Tournament Results With Score

The DisplayTournamentResultsWithScore method replaces the deprecated ReportFinalScore method. MiniTon recommends that you try to use the SubmitScore and ReturnToMiniTon methods. However, DisplayTournamentResultsWithScore can be used as a failsafe if the SubmitScore method fails.

This method is overloaded

{% tabs %}
{% tab title="string" %}

```csharp
void MiniTonCrossPlatform.DisplayTournamentResultsWithScore(string score)
```

**Parameters**

`score` Player's final score as a string
{% endtab %}

{% tab title="int" %}

```csharp
void MiniTonCrossPlatform.DisplayTournamentResultsWithScore(int score)
```

**Parameters**

`score` Player's final score as an integer
{% endtab %}

{% tab title="float" %}

```csharp
void MiniTonCrossPlatform.DisplayTournamentResultsWithScore(float score)
```

**Parameters**

`score` Player's final score as a float
{% endtab %}
{% endtabs %}

***

### Progression API

#### Progression Namespace Constants

Calls to the progression methods **must use one of the three namespace** `string` values. Each namespace return a separate list of key-value pairs for for that namespace:

* `DefaultPlayerData` For read-only MiniTon player data and is game-specific.
* `PlayerData` For publisher-defined player data and is game-specific.
* `InGameItems` For publisher-defined player data and is shared across all games in publisher's portfolio.

```csharp
ProgressionNamespace.DEFAULT_PLAYER_DATA
ProgressionNamespace.PLAYER_DATA
ProgressionNamespace.IN_GAME_ITEMS
```

***

#### Get Progression User Data

Retrieve data for the current user. This method requires `callback` methods that allow you to handle success and fail scenarios.

```csharp
void MiniTonCrossPlatform.GetProgressionUserData(string progressionNamespace, List<string> userDataKeys, Action<Dictionary<string, ProgressionValue>> successCallback, Action<string> failureCallback)
```

**Parameters**

`progressionNamespace` One of the Namespace String Constants

`userDataKeys` String key list of desired fields.

`successCallback` Action delegate to handle successful callback. The method must be defined in the implementation.

`failureCallback` Action delegate to handle failed callback. The method must be defined in the implementation.

***

#### Update Progression User Data

Write data for the current user. This method requires `callback` methods that allow you to handle success and fail scenarios. Can update up to 25 elements per call.

> **Note**
>
> The **DefaultPlayerData** namespace is read-only, and cannot be used with this method.

{% code overflow="wrap" %}

```csharp
void MiniTonCrossPlatform.UpdateProgressionUserData(string progressionNamespace, Dictionary<string, object> userDataUpdates, Action successCallback, Action<string> failureCallback)
```

{% endcode %}

**Parameters**

`progressionNamespace` One of the Namespace String Constants

`userDataUpdates` Dictionary of key/value pairs to be updated

`successCallback` Action delegate to handle successful callback. The method must be defined in the implementation

`failureCallback` Action delegate to handle failed callback. The method must be defined in the implementation

***

### Random Generator

#### Random Value

Use the MiniTon random implementation to ensure each competitor receives the exact same random number.

```csharp
float MiniTonCrossPlatform.Random.Value()
```

**Returns**

A generated pseudo random float value

***

#### Random Value Ranged

This method is overloaded

{% tabs %}
{% tab title="int" %}
{% code overflow="wrap" %}

```csharp
int MiniTonCrossPlatform.Random.Range(int min, int max)
```

{% endcode %}

**Parameters**

`min` The minimum int value for the range`max` The maximum int value for the range

**Returns**

A generated pseudo random int value within the given range

> **NOTE**
>
> The Random function `Range(int min, int max)` requires the min and max value range (max-min) to be no larger than `Int.MaxValue` to prevent overflow
> {% endtab %}

{% tab title="float" %}

```csharp
float MiniTonCrossPlatform.Random.Range(float min, float max)
```

**Parameters**[**​**](https://docs.skillz.com/docs/api-reference/#parameters-71)

`min` The minimum float value for the range

`max` The maximum float value for the range

**Returns**[**​**](https://docs.skillz.com/docs/api-reference/#returns-25)

A generated pseudo random float value within the given range

> **NOTE**[**​**](https://docs.skillz.com/docs/api-reference/#note-2)
>
> The Random function `Range(float min, float max)` requires the min and max value range (max-min) to be no larger than `Float.MaxValue` to prevent overflow
> {% endtab %}
> {% endtabs %}

***

#### Random Point Inside Unit Sphere

Generate a point inside the unit sphere using `Value()`.

```csharp
Vector3 MiniTonCrossPlatform.Random.InsideUnitSphere();
```

**Returns**

A new [`Vector3`](https://docs.unity3d.com/ScriptReference/Vector3.html) object

***

#### Random Point Inside Unit Circle

Find a point inside the unit circle using `Value()`.

```csharp
Vector2 MiniTonCrossPlatform.Random.InsideUnitCircle();
```

**Returns**

A new [`Vector2`](https://docs.unity3d.com/ScriptReference/Vector2.html) object

***

#### Random Point On Unit Sphere

Hybrid rejection / trig method to generate points on a sphere using `Value()`.

```csharp
Vector3 MiniTonCrossPlatform.Random.OnUnitSphere();
```

**Returns**

A new [`Vector3`](https://docs.unity3d.com/ScriptReference/Vector3.html) object

***

#### Random Quaternion in Rotation

Quaternion random using `Value()`.

```csharp
Quaternion MiniTonCrossPlatform.Random.Rotation();
```

**Returns**

A new [`Quaternion`](https://docs.unity3d.com/ScriptReference/Quaternion.html) object

***

#### Random Quaternion in Rotation Uniform

Quaternion random using `Value()`.

```csharp
Quaternion MiniTonCrossPlatform.Random.RotationUniform();
```

**Returns**

A new [`Quaternion`](https://docs.unity3d.com/ScriptReference/Quaternion.html) object

***

### Helpers

#### Get Match Info

```csharp
MiniTonSDK.Match MiniTonCrossPlatform.GetMatchInfo();
```

**Returns**

A [`Match`](/developer-success/miniton-developer-documentation/api-reference#match-info) object containing information about the current match in progress

***

#### Get Match Rules

Returns the match gameplay parameters that you set up in the MiniTon Developer Console for each tournament type

```csharp
Hashtable MiniTonCrossPlatform.GetMatchRules();
```

**Returns**

`Hashtable` containing the gameplay parameters of the current match

***

#### Get Player

Gets the currently logged-in player info. This will return an empty object if a MiniTon player has not been created yet.&#x20;

```csharp
MiniTonSDK.Player MiniTonCrossPlatform.GetPlayer();
```

**Returns**

A [`Player`](/developer-success/miniton-developer-documentation/api-reference#player-info) object

***

#### Get SDK Version

Gets the version of the MiniTon SDK your game is being run on.

```csharp
string MiniTonCrossPlatform.SDKVersionShort();
```

**Returns**

MiniTon SDK version as a string

***

#### Is Match In Progress

Checks if a match is currently in progress.

```csharp
bool MiniTonCrossPlatform.IsMatchInProgress();
```

**Returns**

A boolean indicating if a match if is in progress

***

#### Set Metadata for Match In Progress

Updates the meta data for a MiniTon match in progress to track player actions, level types, or other information pertinent to the MiniTon integration. There should be no more than 10 key/value pairs in the supplied collection. Data will only be available to MiniTon to help identify fairness in level-based games.

```csharp
void MiniTonCrossPlatform.AddMetadataForMatchInProgress(string metadataJson, bool forMatchInProgress)
```

**Parameters**

`attributes` String representing the meta data in a JSON string

`forMatchInProgress` Boolean to check whether the user is in a MiniTon game

***

***

### Sync API

#### Is Match Completed

This will return whether or not another client connected to this match has called either `displaySynchronousTournamentResultsWithScore` or `initiateSynchronousAbortWithCompletion:` to end the match.

```csharp
bool MiniTonCrossPlatform.IsMatchCompleted()
```

**Returns**

Boolean indicating whether or not the match has been completed

***

#### Send Data

Sends a message to all clients connected to this match. This will trigger `MiniTonSyncDelegate::onDidReceiveData:` on all clients connected to the current match.

> Note:&#x20;
>
> `NSData` passed to this function are limited to a certain size based on the game, and this function will assert if over that size. (2048 bytes currently).

```csharp
void MiniTonCrossPlatform.SendData(byte[] data)
```

**Parameters**

`data` The message to be sent, max 2048 bytes

***

### Objects

#### Real-Time Server Connection Info

**`CustomServerConnectionInfo`**

| Property   | Data Type | Description                                                 |
| ---------- | --------- | ----------------------------------------------------------- |
| isBotMatch | bool      | Indicates if the match is a sync bot match                  |
| MatchId    | string    | The ID of the real-time match                               |
| MatchToken | string    | An encrypted token to help validate the session server side |
| ServerIp   | string    | The hostname or IP for the match                            |
| ServerPort | string    | The port for the game server                                |

***

#### Match Info

**`Match`**[**​**](https://docs.skillz.com/docs/api-reference/#match)

| Property                   | Data Type                                                                                    | Description                                                                                         |
| -------------------------- | -------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
| BracketRound               | int                                                                                          | Indicates the round of the bracket tournament if IsBracket is true                                  |
| CustomServerConnectionInfo | CustomServerConnectionInfo                                                                   | The connection info to a custom server that coordinates a real-time match                           |
| Description                | string                                                                                       | The description of this tournament type                                                             |
| EntryToncoin               | float                                                                                        | If this tournament is being played for Toncoin, this is the amount of Toncoin required to enter     |
| EntryPoints                | int                                                                                          | If this tournament is being played for Points, this is the amount of Points required to enter.      |
| GameParams                 | Dictionary\<string, string>                                                                  | The custom parameters for this tournament type specified in the developer portal                    |
| ID                         | ulong                                                                                        | The unique ID for the match                                                                         |
| IsBracket                  | bool                                                                                         | Indicates the match is a bracketed tournament                                                       |
| IsToncoin                  | bool                                                                                         | Indicates the match is for Toncoin prizes or for Points                                             |
| IsCustomSynchronousMatch   | bool                                                                                         | Indicates if the match is a sync match                                                              |
| IsSynchronous              | bool                                                                                         | Deprecated. Indicates if this match is Sync. Note: please use the IsCustomSynchronousMatch property |
| IsTieBreaker               | bool                                                                                         | Indicates whether the match is a tie-breaker                                                        |
| Name                       | string                                                                                       | Name of the match                                                                                   |
| Players                    | List<[Player](/developer-success/miniton-developer-documentation/api-reference#player-info)> | List of players in the match                                                                        |
| MiniTonDifficulty          | uint                                                                                         | The difficulty of the game (used with automatic difficulty). Note: only set in production.          |
| TemplateID                 | int                                                                                          | The unique ID for the tournament template this match is based on                                    |

***

#### Player Info

**`Player`**

| Property           | Data Type | Description                                             |
| ------------------ | --------- | ------------------------------------------------------- |
| AvatarURL          | string    | A link to the user's avatar image                       |
| DisplayName        | string    | Player name                                             |
| FlagURL            | string    | A link to the user's country's flag image               |
| ID                 | ulong     | The Telegram ID unique to this user                     |
| IsCurrentPlayer    | bool      | This Player represents the current user if this is true |
| TournamentPlayerID | ulong     | A Tournament Player ID unique to this user              |

***

#### Progression Metadata

**`ProgressionMetadata`**

| Property | Data Type     | Description                                                   |
| -------- | ------------- | ------------------------------------------------------------- |
| GameIds  | List\<string> | List of relevant game IDs for the associated ProgressionValue |

***

#### Progression Value

**`ProgressionValue`**

| Property        | Data Type           | Description                                                               |
| --------------- | ------------------- | ------------------------------------------------------------------------- |
| DataType        | string              | The data type for the stored value                                        |
| DisplayName     | string              | The display name for the stored value                                     |
| LastUpdatedTime | DateTime            | The timestamp of when the data was last updated on MiniTon servers in UTC |
| Metadata        | ProgressionMetadata | The metadata for this progression value                                   |
| Value           | string              | The stored value for this progression value                               |


# Developer Cooperation


# Is your game a game of skill?

{% hint style="info" %}
MiniTon only works with skill-based games
{% endhint %}

Please check if all answers are 'Yes' to determine if your game is skill-based.

* [ ] Is skill the determining factor in the outcome of the game?
* [ ] Are tiebreakers handled based on skill?
* [ ] Does the game’s format allow a skilled player to have a consistent advantage over a non-skilled competitor?
* [ ] Is the game free of important decisions that can be made only by guessing?
* [ ] Are there defined rules without predetermined odds of success?
* [ ] Are random events removed as much as possible?


# Go Live with MiniTon

After integrating the MiniTon SDK into your game and conducting extensive testing, you will reach a point where you are ready to launch your game on MiniTon. We will assist you in understanding the necessary steps to make your game accessible on the MiniTon platform.

* [ ] Switch Your Game to Production
* [ ] Test MiniTon in Production[​](https://docs.skillz.com/docs/release-your-game-overview#test-skillz-in-production)

> Here is a list of the things you should test in Production:
>
> * Verify you can log in to a MiniTon Production account.
> * Verify you can play in all configured tournaments.
> * Verify that scores and tournament results are being properly reported.
> * Test that cash transactions work in Production.
> * Verify that no MiniTon operations cause your game to crash.
> * Ensure that if players attempting to abort a game are asked to confirm that they want to forfeit the match.
>
> Production testing can only be done on an actual device, not through the simulator. [​](https://docs.skillz.com/docs/release-your-game-overview#sign-up-for-skillz-games)

* [ ] To distribute your game on MiniTon BOT, fill out all of the information on the "Publish on MiniTon Games" page, which you can find in your game's Optimize tasks.

### Receiving Payments[​](https://docs.skillz.com/docs/release-your-game-overview#receiving-payments) <a href="#receiving-payments" id="receiving-payments"></a>

After launching your game on MiniTon, it's time to start earning.&#x20;

If your game enable cash tournaments, you can receive payment.&#x20;

We pay our developers within 15 days after the end of the month. Your earnings will be based on the entry fees paid by players in your game, and you'll receive 50% of the revenue.&#x20;

Each month, your revenue statement will break down the actual amount. You can access Revenue Statements within your developer console and receive them via email within 30 days of the end of the month.


# Game Marketing Guidelines

## General

On the MiniTon platform, only skill-based games are allowed. Games that rely on luck or casino-style mechanics are prohibited. To ensure that your game is not confused with games of chance and for the benefit of all game developers on our platform, please adhere to the following guidelines.

## Marketing and In-Game Copy

* Avoid using names or descriptions that suggest the game relies on chance or gambling, such as Blackjack, Poker, Roulette, or Slots.
  * If MiniTon grants written approval, you can describe your game as a "skill-based game inspired by" a listed game, as long as your copy clearly indicates that it is a skill-based adaptation of the concept.
* Please refrain from mentioning anything related to betting, wagering, gambling, luck, chance, or guessing.
* Please refrain from using "real money" or "RMG". Instead, we suggest using "real-world prizes" or "real prizes".
* It is advisable to refrain from using the term "addictive".
  * Here are some options to consider: engaging, enticing, captivating, challenging, fun, and absorbing.
* Do not use language commonly used by casinos or check cashing establishments such as "ca$h", "get cash fast", or "cash on the spot".
* Do not include the MiniTon brand in your app title or subtitle. You may use MiniTon in the description of your ads with the following phrases:
  * Powered by MiniTon®
  * Featuring prize competitions provided by MiniTon®
  * With fair competition and player-matching powered by MiniTon®
  * Challenge players worldwide to MiniTon®, a fair, fun, and meaningful mobile game competition with leaderboards, trophies, real-world prizes, and a loyalty program that rewards your playing!
  * MiniTon Random™ guarantees fair player matching and gameplay conditions, ensuring that only the most skilled competitor wins.

## Marketing and In-Game Artwork / Audio

Do not use the following imagery:

* Betting with poker chips
* Casino environments (interior or exterior)
* Slot machine symbols (stylized sevens, bars, cherries, jackpot symbols, etc.)
* Casino games (slots, roulette, craps, keno, etc.)
  * Cards, dice, and felt tabletops are okay if not presented in a gambling context
* Chance-based games (lottery, coin flips, scratchers, etc.)
* Signs or landmarks from Las Vegas or other iconic gambling locations
* Alcohol or other controlled substances
* Minors under age 18
* Pornography or sexualized imagery
* Avoid using sounds or voiceovers related to gambling or casinos.


# Tutorial Best Practices

* Many games live or die based on the effectiveness of the first-time user experience (FTUE) and the game’s ability to retain players after their first session. The most powerful tool for optimizing this aspect of a game’s performance is the initial game tutorial.
* When players feel comfortable winning, they are much more likely to move to cash tournaments. This can be accelerated by a great tutorial.
* Returning players can forget rules and scoring details, and they may require a refresher to feel confident about their abilities before competing again. Tutorials help to even the playing field by ensuring that everyone understands what is required for success.

## Tutorial Optimization - Form and Function[​](https://docs.skillz.com/docs/tutorials#tutorial-optimization---form-and-function) <a href="#tutorial-optimization---form-and-function" id="tutorial-optimization---form-and-function"></a>

Ensuring that players know how to play is crucial to the first-time user experience. There are four common approaches for integrating tutorials into MiniTon games. These are outlined below along with some additional topics covering various formats, where players access tutorials, the essence of a great tutorial, and recommendations on maximizing their efficiency.

## Successful Tutorial Configurations[​](https://docs.skillz.com/docs/tutorials#successful-tutorial-configurations) <a href="#successful-tutorial-configurations" id="successful-tutorial-configurations"></a>

| Slideshow- A paginated collection of topics with focused information about key concepts                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p><img src="https://docs.skillz.com/assets/images/sol-cube-56ca35eb15cad2f73a59d537ce3547fc.png" alt="Solitaire Cube"><br><a href="https://apps.apple.com/us/app/solitaire-cube-classic-cards/id1114214294">Solitaire Cube</a></p>                                                                                                                                                                                                                                                                                                                                                                              |
| <ul><li>Strongly recommended for best overall performance - this format can present a lot of valuable information with minimal friction.</li><li>A clear theme or concept for each slide makes it easy for players to find the specific information they are looking for, even in the middle of a match.</li><li>Recommended when a game has multiple mechanics or a structured round order.</li><li>Best when limited to fewer than six pages.</li><li>Animated visuals are strongly recommended as they help to clarify key concepts, improve comprehension, and give the game a more polished feel.</li></ul> |

| Infographic - A pre-game screen which highlights key concepts in single, digestible image                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p><img src="https://docs.skillz.com/assets/images/tutorial-example-c6a5ac801a7234898c34849d3106e37a.png" alt="Tutorial Example"><br><a href="https://apps.apple.com/us/app/dunk-a-lot-tournaments/id1403923663">DunkALot Tournaments</a></p>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| <ul><li>Good for games with simple mechanics that can be explained on a single slide.</li><li>Focus on images and diagrams over text where possible.</li><li><p>Strongly recommended for games with multiple game modes.</p><ul><li>For example, if a game has a specific or unique objective or obstacle for a level, it is valuable to show a “match start” infographic screen that focuses specifically on that mechanic as a primer for what lies ahead.</li><li>This more specific “match start” infographic is different from the broader, one-time infographic that appears as part of the FTUE.</li></ul></li><li>A typical FTUE infographic appears once, on the first game played. A “match start” infographic may appear at the start of every match that requires a specific explanation of a temporary mechanic.</li><li>This format presents the least amount of friction in the game’s new user funnel.</li></ul> |

<table data-full-width="false"><thead><tr><th>Interactive - Hands on instruction, first describing a concept and then requiring the player to perform it</th></tr></thead><tbody><tr><td><img src="https://docs.skillz.com/assets/images/jb-47fcf3f98eaa0502b635e6247f05d3ba.png" alt="Jewel Blitz"><br><a href="https://apps.apple.com/us/app/jewel-blitz-block-puzzle-game/id1449592545?ls=1">Jewel Blitz</a></td></tr><tr><td><ul><li>Recommended for games with a substantial learning curve, where concepts should be confirmed to be understood, like a checklist.</li><li>Best when limited to less than five interactions.</li><li>Interactive tutorials are very effective but are also high friction and should always include a skip option.</li></ul></td></tr></tbody></table>

| Video - High-production video showcasing concepts and exciting gameplay                                                                                                                                                                                                                                                     |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <p><img src="https://docs.skillz.com/assets/images/bowl-7d0d831f3b7067365a4fd21acd512352.png" alt="Strike!"><br><a href="https://apps.apple.com/us/app/strike-esports-bowling/id797092883">Strike!</a></p>                                                                                                                  |
| <ul><li>Strongly recommended for showcasing kinetic gameplay and difficult to execute scenarios.</li><li>Use when slideshow, infographic, and interactive approaches aren’t sufficiently nuanced or detailed.</li><li>Best when video does not require buffer time and length is limited to less than 40 seconds.</li></ul> |

## Multiple Tutorial Touch Points[​](https://docs.skillz.com/docs/tutorials#multiple-tutorial-touch-points) <a href="#multiple-tutorial-touch-points" id="multiple-tutorial-touch-points"></a>

There are a few different places where tutorials can be integrated effectively. We recommend that gameplay is always explained to the player in the FTUE, immediately before their first match.

Additionally, not every player will retain all the tutorial information the first time. As a result, there are benefits to utilizing different touchpoints. We suggest granting access to the tutorial from some of the touchpoints defined below:

**Immediately Before First Game Begins**[**​**](https://docs.skillz.com/docs/tutorials#immediately-before-first-game-begins)

<table><thead><tr><th width="202">Account Creation</th><th>Matchmaking</th><th>FTUE Tutorial</th><th>First Game</th></tr></thead><tbody><tr><td><img src="https://docs.skillz.com/assets/images/ftue1-3d3dfd9903f19775e5a4655ab0c6210f.png" alt="alt_text"></td><td><img src="https://docs.skillz.com/assets/images/ftue2-4915c5a6649b6b92591fcdb2e18f51a2.png" alt="" data-size="original"></td><td><img src="https://docs.skillz.com/assets/images/ftue3-424f682cd3ee638079cd7998431a6ba9.png" alt="ftue3"></td><td><img src="https://docs.skillz.com/assets/images/ftue4-cdd365156e4cc4cedcf63ba2aab847e0.png" alt="ftue4"></td></tr></tbody></table>

| On Landing Screen in Later App Loads​                                                                        |                                                                                                                                                                                                                                                                                                                                                                                                |
| ------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ![landing-screen](https://docs.skillz.com/assets/images/landing-screen-a01e0be65fc310de67384e77c7488b73.png) | <p><strong>Title Screen</strong></p><ol><li><strong>Game Branding</strong></li><li><strong>Tournaments Button</strong> - Takes player to the MiniTon UI</li><li><strong>Tutorial Button</strong> - Access stand-alone tutorial</li><li><strong>Settings Button</strong> - Access sound and haptic controls</li><li><strong>More Button</strong> - Cross-promo to other MiniTon games</li></ol> |

| As Part of the Pre-Game Screen​                                                                  |                                                                                                                                                                                                                                                                                                                                                            |
| ------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ![pre-game](https://docs.skillz.com/assets/images/pre-game-2dd312d38bb2df7cbd0da4412eeb8402.png) | <p><strong>Pre-Game Screen</strong></p><ol><li><strong>Information Banner</strong></li><li><strong>Instruction Panel</strong> - Describes key objectives and goals</li><li><p></p><ol><li><strong>Tutorial Button</strong> - Displays stand-alone tutorial</li><li><strong>Settings Button</strong> - Access sound and haptic controls</li></ol></li></ol> |

| Accessible from the Pause Menu​                                                            |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| ------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ![pause](https://docs.skillz.com/assets/images/pause-5419e4a49882db82b0bd1baf245dcc63.png) | <p><strong>Pause Menu</strong></p><ol><li><strong>Title Card</strong> - Describes screen</li><li><strong>Audio Controls</strong> - Used to adjust audio</li><li><strong>Tutorial Button</strong> - Displays rules and scoring</li><li><strong>Score</strong> - Communicates score at time of pause. Ending the match will submit that score.</li><li><strong>Return Button</strong> - Returns to gameplay</li><li><strong>End Early Button</strong> - Submits current score and ends match</li></ol> |

## Sync Tutorial Best Practices[​](https://docs.skillz.com/docs/tutorials#sync-tutorial-best-practices) <a href="#sync-tutorial-best-practices" id="sync-tutorial-best-practices"></a>

If a game features a sync (real-time) mode, the tutorial - *regardless of the configuration* - should include a section at the end explaining that it is possible to play a real-time match with a human opponent. This information should appear in both the async tutorial and the sync tutorial. In fact, unless there is an explicit need to call out sync-only functionality, we recommend the tutorial be the same for both modes. If it is determined that the sync mode absolutely must include different information than the async mode, match info can be used to dynamically determine which tutorial to show.

Data shows that players that experience sync play early on are much more likely to engage with pro tournaments. Any opportunity to remind players that sync play is supported will positively impact a game’s metrics.

For sync games, we also recommend notifying the player that they can play real-time games against a human opponent as soon as they complete their second asynchronous practice match. Currently, the best time to relay this information is immediately upon completion of that second practice match and *before* the results screen (where the player presses Submit Score), as once the results screen appears, the player must be transitioned directly back to the SDK.

## Tutorial Breakdown[​](https://docs.skillz.com/docs/tutorials#tutorial-breakdown) <a href="#tutorial-breakdown" id="tutorial-breakdown"></a>

Tutorials teach players fundamental concepts of a game to help them start playing well. This accelerated success is crucial to good monetization, which is why it is important to proactively display a tutorial to the user in their first session. Additionally, the tutorial should be easily accessible in later sessions from a number of different touchpoints to ensure players always have the information they need to succeed.

#### Key Concepts to Include in Your Tutorial (Priority Order)[​](https://docs.skillz.com/docs/tutorials#key-concepts-to-include-in-your-tutorial-priority-order) <a href="#key-concepts-to-include-in-your-tutorial-priority-order" id="key-concepts-to-include-in-your-tutorial-priority-order"></a>

* **Game goal / core loop** - What is the objective and how do you play?
* **Game controls** - How are the controls configured?
* **Special mechanics / power-ups** - What else does the player need to know?
* **Scoring** - How are points earned?
* **Tips and Tricks** - What essential strategies does the player need to understand?
  * Don’t go too deep here - figuring out the best strategies is part of a player’s enjoyment of a competitive game!
* **Sync** - Basic description of sync play functionality including any rules specific to sync play. Async and sync players alike should have access to this information as we’d like to nudge players toward sync play for improved engagement and monetization.

#### Successful Approaches for Tutorial integration[​](https://docs.skillz.com/docs/tutorials#successful-approaches-for-tutorial-integration) <a href="#successful-approaches-for-tutorial-integration" id="successful-approaches-for-tutorial-integration"></a>

* Trigger FTUE tutorial after login and initial matchmaking, immediately before the player’s first match.
* Use concise instruction covering only required concepts.
* Ensure clear visual focus for the concepts communicated, and animate if possible.
* Use simple language, clear images and diagrams, and focus on fast comprehension.

#### Things to Avoid[​](https://docs.skillz.com/docs/tutorials#things-to-avoid) <a href="#things-to-avoid" id="things-to-avoid"></a>

* Illegible text, poor grammar, and misspellings dilute the tutorial’s message.
* Over-communicating causes distraction and hinders focus.
* Overly long tutorials cause players to become impatient and can really harm your game’s new user funnel metrics. Keep it short and minimize friction to get the player into their first match as soon as possible!
* When crafting an interactive tutorial, be extra careful not to introduce bugs, confusing steps, or actions that are difficult for players to execute.

[<br>](https://docs.skillz.com/docs/score-summary)


# Unlock Real Prizes

At MiniTon, our mission is to bring out the best in everyone through competition. You are born to create great games. We exist to realize their full potential. Prize Enablement is a major milestone on your path to monetization on MiniTon’s platform. Upon Prize Enablement, your game will be able to host real-prize tournaments and start to monetize.

## Requirements to Become Real Prize Enabled

Games that meet all of the following performance goals will be reviewed for Prize Enablement.&#x20;

|          Thresholds         |
| :-------------------------: |
| 75 Daily Active Users (DAU) |
|      6 Matches per DAU      |
|     4.5% Day 7 Retention    |
|   70% Launches to 2Matchs   |
|      Pass Fairness Test     |

All metrics are calculated using 7-day rolling averages and are available on the Analytics page on Developer Console. Once the above requirements are met, our Developer Success team will conduct a final review.&#x20;

Here are the additional conditions we look for:&#x20;

* Integrated with the most recent MiniTon SDK Free of bugs, crashes, and user experience errors
* 4-star rating in MiniTon
* No 3rd-party ads&#x20;
* Adherence to [MiniTon Marketing Guidelines](/developer-success/developer-cooperation/game-marketing-guidelines)

If your game meets all the requirements and has not been Prize Enabled, please contact us. Our Developer Success team will be in touch within five business days.

Please note that in limited cases, we request content and/or best practice changes to your game as a precursor to enabling real-world prizes. MiniTon maintains full discretion to withhold real-prize tournaments for any game at any time. Games must remain in compliance with these conditions in order to maintain their real-prize tournaments.

## Minimum of 75 Daily Active Users (DAU)

The minimum DAU requirement is set to safeguard user experience and ensure sustainable monetization. Any game with under 75 DAU often leads to players not matching and more aborted matches, which ultimately harms paying user retention. 75 DAU is the minimum player volume that justifies offering real prize tournaments.

## Minimum of 6 Matches per DAU

Games per DAU is a key indicator of player engagement. Games on MiniTon platform with at least 6 Games per DAU show decent tournament liquidity and healthy monetization.

## Minimum of 4.5% Day 7 Retention

Day 7 Retention measures the percentage of players that remain active 7 days after installing your game. Games with Day 7 Retention 4.5% and above have a higher chance of building a healthy paying user base that supports long-term monetization.

## Minimum of 70% Launches to 2Matchs

Launches to 2Matchs (L:2M) is the percentage of players that participate in two tournaments in your game post-install. Using the MiniTon SDK, the First-Time User Experience (FTUE) guides the player through playing in two tournaments. So L:2M is an easy way to measure the success of player onboarding. If your metric falls below 70%, it could mean two things: first, views brought to your game are of low quality and do not match your target audience and/or second, on average users are not very satisfied with their first-time experience in your game. To improve your Launches to 2Matchs conversion, make sure that your game is fully tested for bugs and has a clear and intuitive tutorial for first-time users.

## Pass Fairness Test

At the heart of any competition is that each participant is offered an equal opportunity to win. MiniTon is fully committed to ensuring that all competitive matches are fair, without providing an advantage of one player over another. MiniTon’s patented algorithm determines the skill level of a game by measuring a game’s outcome compared to a player’s perceived skill. Please make sure that your game has properly implemented MiniTon Random and had at least 1000 games completed in a single type of tournament.

Algorithm scores are a part of the real prize enablement process and are not viewable in the Developer Console. If you would like to see your score, then please contact us. If you would like to learn more about our patented algorithm, then check out our Knowledge Base [here](https://docs.skillz.com/docs/randomness) and [here](https://skillz.zendesk.com/hc/en-us/articles/115001117626-How-do-you-know-a-game-is-really-skill-based-).

If your game does not pass the Fairness Test, we recommend that you re-examine the game mechanics and see if any changes can be made to increase the skill versus chance probability in your game. Some examples of factors that could be re-examined are reducing random variables or adding mechanics to make scoring more varied between players of different skill levels.

## Integrated with the most recent MiniTon SDK

A game must be on the most up-to-date SDK. With every new SDK version, MiniTon is building in features that improve the player experience, decrease negative effects of known bugs, and help drive the overall performance of your game.

## Free of bugs, crashes, and user experience errors

MiniTon wants to ensure that a game is stable before unlocking real prizes. Unexpected bugs and/or crashes result in a higher amount of aborted matches, which create a negative player experience and hurt the overall brand reputation of both MiniTon and the game developer. In addition, aborted matches often result in player refunds, which has the consequence of net revenue losses.

## Minimum of 4-star rating in MiniTon

Part of the MiniTon quality assurance process is to ensure that players enjoy playing well-functioning, fun and polished games. As a low rating often indicates an issue within a game, MiniTon will not enable real prizes in any game that has lower than 4 stars in the appropriate App Store.

## No 3rd-party ads

3rd-party ads are not allowed for any MiniTon game that has unlocked real prizes because they can interfere with the overall gameplay and are disruptive to the player experience. If your game is rejected for this reason, then please remove all 3rd-party ads before re-submitting your game.

## Adherence to MiniTon Marketing Guidelines

While MiniTon encourages game developers to market their game with competitive play and real prizes, it is important to ensure that players don't mistake your game, or MiniTon games in general, for a game of chance. For the mutual benefit of all the game developers on our platform, please follow the recommendations set in the [MiniTon Marketing Guidelines](/developer-success/developer-cooperation/game-marketing-guidelines).

All marketing materials should not utilize MiniTon marketing assets or mention MiniTon without explicit approval.&#x20;


# MiniTon Gaming SDK

Version 1.1\_240110


# Introduction

{% hint style="info" %}
🔐 Game developers obtain a developer key (**Secret Key**) from MiniTon for data consistency verification, ensuring data security.&#x20;

[**Click here to apply for Secret Key**](https://docs.google.com/forms/d/e/1FAIpQLSee0PidvGia2ME5fQzmX5AZorKxTFOflEogsI8lVF2f1HZMUA/viewform?usp=sf_link)

**👺 Game Constraints:**

1. New player tutorial should be displayed
2. Each game needs to set a countdown timer, which used to finalize the game&#x20;
3. If a player quit before the countdown timer ends, the score should be reported
   {% endhint %}

## Overview

1. 🎬First the game developer need includes the two JS file\[`telegram-web-app.js` & `miniton_2.0.js`], calls the `init` function through the SDK to obtain game-related information.

{% hint style="info" %}
![](/files/ibCmPb4MAbFFb0272dq1)

The main page will be displayed at the top layer of the game interface. While the game is loading its resources

It should simultaneously update the progress bar on the main page.

Loading bar progress by calling the `setProgressValue` function via the SDK.&#x20;
{% endhint %}

2. 🚀 Upon entering the game screen
   * Call `start_game` via backend API in order to tell MiniTon the player had started a game.
3. 🕹️ When the game begins
   * Call `start_match` via a backend API call
4. 🎱 While the game is in progress
   * (optionally) Can report "Match Score (`score`)"  multiple times through API
5. 🏁  At the end of the game
   * Call "Match Result (`end_match`)" via a backend API call
6. 🛑 After the game ends
   * Call the SDK’s `setGameOver` function
   * Report “Game End (`end_game`)” information to MiniTon via backend API call


# Initialize and load your game

### Integrate your JS URL

Place the following code inside the `<head></head>` of the page where SDK integration is needed.

```javascript
<script src="https://telegram.org/js/telegram-web-app.js"></script>
<script src="https://h5.miniton.games/sdk/js/miniton_2.0.js"></script>
```

### **Initialize your game in MiniTon**

After integrating the SDK, the first step is to call the init function. This function returns data related to the match.&#x20;

The SDK object can be accessed via `MINITONSDK`, `window.MINITONSDK`, or `window['MINITONSDK']`

```javascript
<initData> MINITONSDK.init(game_id);
```

**Parameters: `game_id`**

| Property | Type    | Description |
| -------- | ------- | ----------- |
| game\_id | Integer | The game ID |

**Return Value: `initData`**

<table><thead><tr><th width="188">Property</th><th width="106">Type</th><th width="199">Signature Verification</th><th>Description</th></tr></thead><tbody><tr><td>game_id</td><td>Integer</td><td>Y</td><td>ID of the game.</td></tr><tr><td>game_name</td><td>String</td><td>Y</td><td>Game Name</td></tr><tr><td>match_id</td><td>Integer</td><td>Y</td><td>Match ID</td></tr><tr><td>match_token</td><td>String</td><td>Y</td><td>Token associated with the ongoing match</td></tr><tr><td>user_ticket</td><td>String</td><td>Y</td><td>Ticket identifying the user.</td></tr><tr><td>first_experience</td><td>Integer</td><td>Y</td><td>Indicates if it is the player’s first experience (0 = No, 1 = Yes). If the value is 1, a tutorial should be displayed.</td></tr><tr><td>taste</td><td>Integer</td><td>Y</td><td>Indicates if it is a trial play (0 = No, 1 = Yes)</td></tr><tr><td>auth_date</td><td>Integer</td><td>Y</td><td>Data Verification Timestamp</td></tr><tr><td>auth_sign</td><td>String</td><td>N</td><td>Data Verification Signature</td></tr><tr><td>language</td><td>String</td><td>N</td><td><p>These are abbreviations used to identify languages. Each abbreviation represents a specific language, such as:</p><ul><li>en: English</li><li>zh: Chinese</li><li>ja: Japanese</li><li>ko: Korean</li><li>ar: Arabic</li><li>ru: Russian</li><li>id: Indonesian</li><li>th: Thai</li><li>es: Spanish</li><li>fr: French</li></ul></td></tr><tr><td>user</td><td><em><strong>UserInfo</strong></em></td><td>N</td><td>User information including user ID, nickname, avatar URL, region, region code, and region icon URL.</td></tr><tr><td>status</td><td>Integer</td><td>N</td><td><p>Status </p><ul><li>0=failed</li><li>1=match ready</li><li>2=match ended</li></ul></td></tr><tr><td>error_msg</td><td>String</td><td>N</td><td>Error message (if any).</td></tr><tr><td>return_url</td><td>String</td><td>N</td><td>URL to return to MiniTon page after the game ends.</td></tr></tbody></table>

***UserInfo***

| Property     | Type    | Description                             |
| ------------ | ------- | --------------------------------------- |
| uid          | Integer | User's Telegram ID                      |
| nickname     | String  | Nick name                               |
| avatar       | String  | User Avatar URL                         |
| region       | String  | Region Name                             |
| region\_code | String  | Region Code (ISO Alpha2 code), e.g., RU |
| region\_icon | String  | Region Icon URL                         |

#### Response  Example

#### **`initData`**

```json
{
    "game_id": 1,
    "game_name": "",
    "match_id": 1,
    "match_token": "",
    "user_ticket": "",
    "first_experience": 0,
    "taste": 0,
    "auth_date": 1704816000,
    "auth_sign": "",
    "user": 
        "uid": 1,
        "nickname": "",
        "avatar": "",
        "region": "",
        "region_code": "",
        "region_icon": ""
    },
    "status": 1,
    "error_msg": "",
    "return_url": ""
}
```

### Set Progress Bar Value

During the loading of game resources, this function should be called multiple times to control the progress bar display on the main game page. When the num value reaches 100, the progress bar will no longer accept changes.

```javascript
MINITONSDK.setProgressValue(num);
```

**Parameters: `num`**

<table><thead><tr><th>Property</th><th width="124">Tyep</th><th>Description</th></tr></thead><tbody><tr><td>num</td><td>Integer</td><td>Progress value (range: 0 &#x3C;= num &#x3C;= 100)</td></tr></tbody></table>


# Start your game until end

## Set “Start Game” Button Click Event Callback

After the progress bar has finished loading, the player can start the game by clicking the “**Start**” button on the page.&#x20;

The game frontend needs to place the game start logic code within the callback function to handle this event.

```javascript
MINITONSDK.setStartGameButtonCallbak(callback);
```

#### Parameters

<table><thead><tr><th>Parameter</th><th width="136">Type</th><th>Description</th></tr></thead><tbody><tr><td>callback</td><td>Function</td><td>The callback function for the "Start Game" button click event. This function contains the logic to start the game when the player clicks the button.</td></tr></tbody></table>

#### Return

none

#### Example

```javascript
MINITONSDK.setStartGameButtonCallbak(() => {
    ...
});
```

## Set the Game Over

This function should be called by the frontend when the player's game ends. It ensures that the game-over state is properly handled in frontend.&#x20;

Backend still need call  `end_game` information to MiniTon, though frontend called following function.

```javascript
MINITONSDK.setGameOver();
```

#### **Parameters:**

None

**Return:**

None


# Reporting Game Data API

(optionally) You can report "Match Score (score)"  multiple times through this API

Report the match score

<mark style="color:green;">`POST`</mark> `https://api.miniton.games/api/v2/match/data_report`

#### Request Body

<table><thead><tr><th>Name</th><th width="77">Type</th><th data-type="checkbox">Signature Verification</th><th>Description</th></tr></thead><tbody><tr><td>game_id<mark style="color:red;">*</mark></td><td>Integer</td><td>true</td><td>ID of the game</td></tr><tr><td>match_token<mark style="color:red;">*</mark></td><td>String</td><td>true</td><td>Token associated with the ongoing match.</td></tr><tr><td>user_ticket<mark style="color:red;">*</mark></td><td>String</td><td>true</td><td>Ticket identifying the user.</td></tr><tr><td>taste</td><td>Integer</td><td>true</td><td>is this a trial game?(can be passed by <code>init</code> fuction</td></tr><tr><td>action<mark style="color:red;">*</mark></td><td>String</td><td>true</td><td><p>Action to be performed</p><p>start_game</p><p>start_match</p><p>score</p><p>end_match</p><p>end_game</p></td></tr><tr><td>score<mark style="color:red;">*</mark></td><td>Integer</td><td>true</td><td>Current player score<br>Must be provided when the action is "score" or "end_match"; default is 0</td></tr><tr><td>auth_date<mark style="color:red;">*</mark></td><td>Integer</td><td>true</td><td>Timestamp for data validation.</td></tr><tr><td>auth_sign<mark style="color:red;">*</mark></td><td>String</td><td>false</td><td>Data validation <a href="https://app.gitbook.com/o/CXkUmAs79znG2uuEKaou/s/9ds1jMNJJ1CgwgNYqr00/~/changes/77/developer-success/miniton-gaming-sdk/how-to-verify-your-signature">signature</a></td></tr></tbody></table>

{% tabs %}
{% tab title="200: OK Success" %}
"msg": "Success"
{% endtab %}
{% endtabs %}

#### **Request Example**

```javascript
{
    "body": {
        "game_id": 1,
        "match_token": "47AD1ED23DB1407720049D586C727C3B",
        "user_ticket": "1843BBAEBC83DDB0E45E378BA37014A9",
        "action": "report_score",
        "score": 5,
        "auth_date": 1704816000,
        "auth_sign": ""
    }
}
```

**Parameter** [**Signature Verification**](/developer-success/miniton-gaming-sdk/how-to-verify-your-signature)

#### Response **Example**

```javascript
{
    "code": 200,
    "msg": "Success",
}
```


# How to verify your signature

### Steps

1. Arrange multiple signature data items in alphabetical order. Each data item forms a string in the format "key=value."
2. Connect each data item string with the "&" symbol.
3. Append the secret\_key to the end of the concatenated string.
4. Obtain the signature data by applying MD5 by above string

**Example Data for Signature**

{% code overflow="wrap" %}

```json
{
        "game_id": 1,
        "match_token": "47AD1ED23DB1407720049D586C727C3B",
        "user_ticket": "1843BBAEBC83DDB0E45E378BA37014A9",
        "taste": 0,
        "action": "report_score",
        "score": 5,
        "auth_date": 1704816000
}
```

{% endcode %}

**secret\_key Example**&#x20;

```
aE18Vlne8LxlHFCm
```

**Signature Example**

{% code overflow="wrap" %}

```scss
md5("action=report_score&auth_date=1704816000&game_id=1&match_token=47AD1ED23DB1407720049D586C727C3B&score=5&taste=0&user_ticket=1843BBAEBC83DDB0E45E378BA37014A9&secret_key=aE18Vlne8LxlHFCm")
```

{% endcode %}


# The Legality of MiniTon

Skill-based competitions have a long-standing presence in legal, social, and commercial spheres. Throughout history, games requiring strategic prowess have allowed players to demonstrate their abilities, ranging from traditional board games to large-scale sporting events. Presently, skill-based games are accessible on various media platforms, such as AOL, MSN, and Yahoo. Moreover, a burgeoning electronic sports (eSports) industry has emerged, offering professional gamers the chance to compete for real money in popular video games.

MiniTon is an innovative platform that enables mobile gamers to participate in skill-based multiplayer tournaments and win tangible rewards. The games offered by MiniTon are classified as games of skill, not chance, which renders the platform's tournaments legally permissible in most regions worldwide.

## Are Skill-based Tournaments Gambling?

Contests that provide tangible rewards based on ability do not fall under the category of gambling, as the criteria for gambling generally involve three distinct components: (1) a reward, (2) payment for participation, and (3) an unpredictable result. Thus, if any of these three factors are absent, the contest is not regarded as gambling. With regards to MiniTon events, player performance determines the outcome, rather than luck, which renders them lawful in the majority of nations.

## Cash Gameplay Enabled/Disabled Locations

#### Cash Disabled Countries

Afghanistan, Andhra Pradesh (State in India), Arunachal Pradesh (State in India), Belarus, Belgium, Bosnia And Herzegovina, Bulgaria, Congo (Democratic Republic), Cote D’Ivoire, Croatia (local name: Hrvatska), Cuba, Cyprus, Czech Republic, Egypt, Estonia, France, French Guiana, French Polynesia, French Southern Territories, Greece, Hungary, Indonesia, Iran (Islamic Republic Of), Iraq, Italy, Japan, Kerala (State in India), Kosovo, Latvia, Lithuania, Malaysia, Malta, Montenegro, Myanmar, Nagaland (State in India), Nigeria, North Korea, North Macedonia, Odisha (State in India), Pakistan, People’s Republic of China, Poland, Portugal, Romania, Russian Federation, Serbia, Sikkim (State in India), Slovakia (Slovak Republic), Slovenia, Sudan, Syrian Arab Republic, Tamil Nadu (State in India), Telangana (State in India), Turkey, Ukraine, Vietnam, Yugoslavia, Zimbabwe.

**Cash Enabled U.S. States:**

Alabama, Alaska, Arizona, California, Colorado, Florida, Georgia, Hawaii, Idaho, Indiana (except Card-Based games), Illinois, Iowa, Kansas, Kentucky, Maine (except Card-Based games), Maryland, Massachusetts, Michigan, Minnesota, Mississippi, Missouri, Montana, Nebraska, Nevada, New Hampshire, New Jersey, New Mexico, New York, North Carolina, North Dakota, Ohio, Oklahoma, Oregon, Pennsylvania, Rhode Island, South Carolina, Tennessee, Texas, Utah, Virginia, Vermont, Washington, West Virginia, Wisconsin, Wyoming, Washington DC and Puerto Rico

{% hint style="info" %}
MiniTon does not currently distinguish Tribal Land from the surrounding state. If a state is cash-disabled, so to will be all Tribal Land within its borders.
{% endhint %}

#### Cash Disabled U.S. States

Arkansas, Connecticut, Delaware, Louisiana, South DakotaCard Based Games - Cash Disabled Maine, Indiana

{% hint style="info" %}
All gamers must be at least 18 years old and their device location settings must be enabled to ensure MiniTon eligibility.
{% endhint %}

## How are skill-based games different from chance-based games?

When it comes to games, there are two primary categories: games of skill and games of chance. Games of skill require players to possess both physical and mental abilities, as well as knowledge, in order to achieve a desired outcome. These types of games often involve the use of strategy, tactics, physical coordination, strength, technical expertise, or other forms of knowledge. In contrast, games of chance heavily rely on random chance or uncertainty to determine the outcome. This can be achieved through various methods, such as using dice, playing cards, or numbered balls drawn from a container. It is worth noting that while some games of skill may incorporate an element of chance, and vice versa, the U.S. courts typically use either **the** **predominance test** or **the material element test** to determine the extent to which skill and chance play a role in determining the outcome of the game.

#### The Predominance Test

The predominance test is frequently utilized to evaluate whether a game is predominantly based on skill or chance. This method involves envisioning a spectrum with pure skill at one end and pure chance at the other. Chess serves as an illustration of a game that is primarily skill-based, whereas conventional slot machines are largely chance-based. Numerous games fall somewhere in between these two extremes, combining both skill and chance. If a game is mostly situated towards the skill end of the spectrum, it is generally classified as a game of skill.

#### The Material Element Test

Across eight states in the United States, the material element test is extensively employed to ascertain whether a game is based on skill or chance. This test assesses the extent to which chance influences the game's outcome. Games like Minesweeper heavily rely on a player's skills, but there are instances where random guesses come into play, ultimately deciding the winner and loser of the game. Despite skill being the dominant factor, chance still holds a considerable sway in determining the game's outcome.

## How does MiniTon determine which games are skill-based?

MiniTon is developing a statistical model that effectively distinguishes games of skill from those of chance. This cutting-edge model is created by a highly acclaimed statistician and will accurately analyze game results from a vast range of games, offering valuable insights into the role of luck in determining the outcome.&#x20;

MiniTon will develop a sophisticated engine to remove randomness and add skill to games with chance.

## What happens if someone logs in from a place where real prize gaming is not legal?

In areas where real-prize gaming requiring skill is not allowed, MiniTon offers virtual currency tournaments that are open for players to participate. To guarantee eligibility for actual rewards, MiniTon relies on the IP address to confirm their location.

## MiniTon Compliance

At MiniTon, we offer a safe and enjoyable platform for competitive gaming that rewards players with monetary and digital currency. We follow all federal and state laws by verifying the residency of account holders and checking IP addresses to ensure eligibility for real prize competitions. Our main focus is to provide a fair and secure gaming experience for all participants.


# Privacy Policy

Effective Date: August 13, 2023

At MiniTon (**“MiniTon”, “we”, “us” or “our”**), we take your privacy and the security of your information very seriously.MiniTon operates a platform, which we make available through our Telegram bot (our **“Site”**), through which we provide technology services and access to our SDK to allow independent game developers to host tournaments and provide competitive gaming functionalities to end-users (collectively, the **“Services”**).This Privacy Policy (**“Privacy Policy”**) sets out how we collect and process information that identifies or is associated with you (your **“personal information”**) when you access our Site or play a game (a **“Developer Game”**) published by an independent game developer that uses our Services (a **“Developer”**).If you have any questions regarding this Privacy Policy, please contact us at <support@mvp.games>

1. **REGION-SPECIFIC DISCLOSURES**

We may choose or be required by law to provide different or additional disclosures relating to the processing of personal information about residents of certain countries, regions or states.If you are resident in the State of California in the United States, please refer to California-specific privacy disclosures.If you are resident in the State of Nevada in the United States, Chapter 603A of the Nevada Revised Statutes permits a Nevada resident to opt out of future sales of certain covered information that a website operator has collected or will collect about the resident. To submit such a request, please contact us at <support@mvp.games.If> you are resident in the European Economic Area or the United Kingdom, please refer to European and UK Privacy Disclosures for additional EEA-specific privacy disclosures.

2. **SPECIAL NOTICE REGARDING MINORS UNDER 18 YEARS OF AGE**

MiniTon respects the privacy of children. The Services are not intended or directed towards children or minors under the age of 18. Please do not use the Services if you are under the age of 18. MiniTon is intent on complying with applicable laws and regulations regarding minors, including the United States’ Children’s Online Privacy Protection Act. Specifically, MiniTon does not knowingly solicit or collect personal information from individuals under 18.If we learn that any personal information has been collected inadvertently from a child, we will delete the information as soon as possible. If you believe that we might have collected information from a child, please send an email to <support@mvp.games>.

3. **NFORMATION WE COLLECT WHEN YOU USE OUR SITE AND OUR SERVICES AS A GAME DEVELOPER**

**3.1 Personal Information you provide directly to us, which may include:** We collect the following personal information you provide when you use our Site and our Services:

* **Login and contact information**, such as your name, phone number, email address and password.
* **Your employment information**, such as the name of your employer and job title.
* **The Services you use.**
* **The Developer Game** for which you use our Services, and the website at which you promote it or make it available for download.
* **Chat, comments and opinions.** When you contact us directly, e.g. by email or phone we will record your comments and opinions.
* **Marketing and Communications Preferences**, such as your preferences in receiving marketing from us and your communication preferences, such as the language in which you choose to communicate with us.
* **The country from which you access our Services.**

**3.2 Personal Information that is passively collected when you use the Sites or Services:** We collect certain personal information automatically when you use our Services, including:

* **Log File Data**, including your internet protocol (IP) address, operating system, browser type, browser ID, date/time of visit, and pages visited.
* **Analytics Data**, including the electronic path you take to our Services, through our Services and when exiting our Services, as well as your usage and activity on our Services, such as the links and objects you view, click or otherwise interact with (also known as “clickstream data”).
* **Approximate Location Data**, including your general geographic location based on your IP address.

**3.3 How we use this information:** We use personal information we collect to:

* **Register and authenticate you**: we use your personal information to allow you to register for and access our Services and update your profile information.
* **Provide our Services**: we use your personal information to provide you with our Services, including providing support services and allowing you to incorporate our SDK into your Developer Game, and to customize the user experience (such as the language in which our Services are provided to you and the time zone in which you record your activities using our Services).
* **Monitor the performance of and improve our Services**: we use your personal information to measure the performance of our Services, fix issues, improve and otherwise develop the features and functionalities of our Services. We also use your personal information to test and develop new products and services.
* **Inform our product roadmapping and marketing**: we use your personal information to gauge market interest to assist in product roadmapping, positioning and inform and tailor our marketing.
* **Communicate with you and deal with complaints**: we use your personal information to send you communications relating to our Services and to address any comments or complaints you submit to us.
* **Send you marketing materials**, including emails, newsletters, and other marketing communications in accordance with your preferences.
* **Maintain the safety and security of our Services**: we use your personal information to detect and prevent fraud, cheating, abuse or other harmful activities, diagnose and fix technology problems, conduct security investigations and risk assessments, and improve and enforce our security measures.
* **Legal and regulatory requirements and proceedings**: we use your personal information in connection with legal and regulatory proceedings and requirements, including the defense of legal claims, compliance with corporate reporting obligations, and compliance with applicable laws.
* **Enforce our rights**: we may use your personal information to monitor, investigate, prevent and/or mitigate violations of our terms of use as well as enforce our agreements with third parties and business partners.
* **For any other lawful purpose, or other purpose that you consent to.**

4. **INFORMATION WE COLLECT WHEN YOU PLAY A DEVELOPER GAME AS A USER**

**4.1 Personal Information you provide directly in the Developer Game:** We may collect the following personal information that you input when you play a Developer Game:

* **Contact information**, such as your name, username, phone number, email address and physical address.
* **Your date of birth.**
* **Payment information**, such as the form of payment you use, payment method details (such as credit or debit card number).
* **Demographic data**, such as your income and other financial information.
* **Identification documents**, such as passport or driving license.
* **Your precise location and the contacts saved on your device**, when you agree, through your device settings, to allow the Developer Game to access this information.
* **Any photos that you upload to your profile.**
* **Chat, comments and opinions** that you send through any in-app messaging features, or when you submit requests for in-app technical support.
* **In-app searches** that you carry out within the Developer Game.
* **Transaction and purchase information**, such as any cash top-ups that you make in the Developer Game and the frequency with which you top-up your account in the Developer Game.

**4.2 Personal Information that is passively collected when you play a Developer Game:**

* **Phone contacts** that you have stored on the mobile device from which you access a Developer Game.
* **Approximate Location Data**, including your general geographic location based on your IP address.
* **Gameplay content**, including recordings of your gameplay and performance records.
* **User ID** that you are automatically assigned in connection with your access to a Developer Game.
* **Device IDs**, such as IDFA and Android ID.
* **Usage Data**, including the time you launched the Developer Game, the pages and content viewed, any adverts that you viewed and clicked on, the objects and links you clicked on and interacted with, and scrolling information.
* **Diagnostics Data**, including any crash logs and usage and performance statistics.

**4.3 How we use this information:** We use personal information we collect to:

* **Register and authenticate you**: we use your personal information to allow you to register for and access Developer Games and update your profile information.
* **Ensure you are able to play a Developer Game**: we use your personal information to ensure that you are legally able to access and play a Developer Game, or use certain features and functionalities of a Developer Game, in your country or state.
* **Deliver physical prizes**: we use your personal information to provide you with any physical prizes that you win when playing Developer Games. In some cases, we may provide your email address or physical address to prize fulfillment partners for the purpose of fulfilling the prize.
* **Help you find other players on Developer Games**, such as people whose details are saved in your phone contacts.
* **Process your payments and purchases**, such as updating your account to reflect any purchases that you make in a Developer Game.
* **Provide features and functionalities of the Developer Game**, such as in-app messaging, chat, gameplay performance records and profile customization features.
* **Provide support** in relation to Developer Games.
* **Monitor the performance of and improve our Services**: we use your personal information to measure the performance of our Services, fix issues, improve and otherwise develop the features and functionalities of our Services. We also use your personal information to test and develop new products and services.
* **Identify how you learned about a Developer Game** in order to understand the effectiveness of any advertising of Developer Games.
* **Communicate with you and deal with complaints**: we use your personal information to send you communications relating to our Services and to address any comments or complaints you submit to us.
* **Send you service related communications**, such as purchase confirmations.
* **Send you marketing materials**, including emails, newsletters, and other marketing communications in accordance with your preferences.
* **Inform and support our marketing**, including helping us determine products and services that may be of interest to you and contacting individuals about our Services.
* **Maintain the safety and security of our Services**: we use your personal information to detect and prevent fraud, abuse or other harmful activities, diagnose and fix technology problems, conduct security investigations and risk assessments, and improve and enforce our security measures.
* **Legal and regulatory requirements and proceedings**: we use your personal information in connection with legal and regulatory proceedings and requirements, including the defense of legal claims, compliance with corporate reporting obligations, and compliance with applicable laws.
* **Enforce our rights**: we may use your personal information to monitor, investigate, prevent and/or mitigate violations of our terms of use as well as enforce our agreements with third parties and business partners.
* **For any other lawful purpose, or other purpose that you consent to.**

5. **SHARING OF PERSONAL INFORMATION COLLECTED FROM YOU**

**5.1** MiniTon may transfer personal information to third parties for the purpose of providing the Services. We may disclose personal information to our appropriate affiliates, including third-party service providers, to provide you with the Services. These third-party service providers are not authorized to retain, share, store or use the personal information for any purposes other than to provide the services they have been hired to provide.The service providers we may share your information with include:

* **Marketing and Attribution Partners** – our marketing service providers help us with campaign support, attribution and analytics to help us identify and attribute user referrals between Developer Games.
* **Customer relationship, service and support partners** – these service providers help support our customer relationships, from our developers to end users of our developer’s applications.
* **Billing and payment providers** – these service providers offer billing and financial administration, as well as payment support.
* **Analytics providers** – these service providers help generate statistics about our Site usage, game play and other data that helps us provide the best services to our customers.
* **Cloud Hosting Service Provider** – Amazon Web Services Inc., is our cloud hosting service provider.

**5.2** Certain personal information is transmitted to a third-party service provider for the purpose of processing any payments. The transmission of your payment information is automatic, and at no point do we, or any of our agents or employees, have the ability to review, access or retain such payment information.**5.3** MiniTon may also elect to transfer your personal information to third parties under special circumstances: (i) to comply with a legal requirement, judicial proceeding, court order, or legal process served on MiniTon; (ii) to investigate a possible crime, such as fraud or identity theft; (iii) in connection with the sale, purchase, merger, reorganization, liquidation or dissolution of MiniTon; (iv) when we believe it is necessary to protect the rights, property, or safety of MiniTon or other persons; (v) as otherwise required or permitted by law, including any contractual obligations of MiniTon; or (vi) with your prior authorization.

6. **ACCOUNT SECURITY**

The security of your account relies on your protection of your password and mobile device. You are responsible for maintaining the security of your password and mobile device. You are solely responsible for any and all activities that occur under your account. You may not share your password with anyone. We will never ask you to send your password or other sensitive information to us in an email, though we may ask you to enter this type of information on the MiniTon SDK interface.Any email or other communication requesting your password or asking you to provide sensitive account information via email should be treated as unauthorized and suspicious and should be reported to us immediately at <support@mvp.games>. If you do share your password or your mobile device with a third party for any reason, the third party will have access to your account and your personal information, and you may be responsible for actions taken using your password. If you believe someone else has obtained access to your password, please change it immediately. If you believe that an unauthorized access has already occurred please report it immediately at <support@mvp.games>.

7. **POSTINGS TO PUBLIC FORUMS**

All postings in MiniTon public forums will generally be available to, and freely accessible by, other users of the MiniTon public forums as well as the internet’s general public. Therefore, users should not expect that any information they post will be kept private or confidential and are encouraged to exercise discretion when using the public forums. Additionally, your username, which you can change, will always be included in conjunction with your postings in the public forums. MiniTon is not responsible for events arising from the distribution of any information you choose to publicly post or share through the forums. All information or materials uploaded by you while utilizing the Services is subject to our Terms of Service.

8. **MARKETING**

From time to time, we may contact you with relevant information about our Services. Most messages we send will be by email. For some messages, we may use personal information we collect about you to help us determine the most relevant information to share with you.You can change your marketing preferences by clicking on the unsubscribe link at the bottom of our emails.

9. **THIRD PARTY DATA COLLECTION AND ONLINE ADVERTISING**

We participate in interest-based advertising and use third-party advertising companies to serve you targeted advertisements based on your browsing history. We permit third-party online advertising networks, social media companies and other third-party services, to collect information about your use of our online services over time so that they may play or display ads on our Services, on other websites or services you may use, and on other devices you may use.Typically, though not always, the information used for interest-based advertising is collected through tracking technologies, such as cookies, web beacons, embedded scripts, location-identifying technologies, and similar technology, which recognize the device you are using and collect information, including click stream information, browser type, time and date you visited the site, AdID, precise geolocation and other information. We may share a common account identifier (such as a hashed email address or user ID) with our third-party advertising partners to help identify you across devices.We and our third-party partners use this information to make the advertisements you see online more relevant to your interests, as well as to provide advertising-related services such as reporting, attribution, analytics and market research. We may also use services provided by third parties (such as social media platforms) to serve targeted ads to you and others on such platforms. We may do this by providing a hashed version of your email address or other information to the platform provider. Please see “Your Choices About Online Ads” below, to learn more about interest-based advertising.**9.1 Your Choices About Cookies**If you would prefer not to accept cookies, most browsers will allow you to change the setting of cookies by adjusting the settings on your browser to: (i) notify you when you receive a cookie, which lets you choose whether or not to accept it; (ii) disable existing cookies; or (iii) set your browser to automatically reject cookies. Be aware that disabling cookies may negatively affect the functionality of this and many other websites that you visit. Disabling cookies will usually result in also disabling certain functionalities and features of the Services.Depending on your device and operating system, you may not be able to delete or block all cookies. In addition, if you want to reject cookies across all your browsers and devices, you will need to do so on each browser on each device you actively use. You may also set your email options to prevent the automatic downloading of images that may contain technologies that would allow us to know whether you have accessed our email and performed certain functions with it.If you are accessing the Site from the UK or EEA, we will only use cookies (other than cookies that are strictly necessary for the provision of the Services) to the extent you give us your consent to do so. Please see our cookie policy for more information about the cookies we use on our Site.**9.2 Your Choices About Online Ads**To learn more about interest-based advertising and how you may be able to opt-out of some of this advertising, you may wish to visit the Digital Advertising Alliance’s (DAA) and/or the Network Advertising Initiative’s (NAI) online resources, at [www.aboutads.info/choices](https://www.skillz.com/privacy-policy/www.aboutads.info/choices) or <http://www.networkadvertising.org/choices/> and you can opt-out of receiving some interest-based advertisements on mobile apps by visiting <http://www.aboutads.info/appchoices>. You may also be able to limit interest-based advertising through the settings menu on your mobile device by selecting “limit ad tracking” (iOS) or “opt-out of interest-based ads” (Android). You may also be able to opt-out of some — but not all — interest-based advertising served by mobile ad networks by visiting <http://youradchoices.com/appchoices> and downloading the mobile AppChoices app.Please note that when you opt out of receiving interest-based advertisements, this does not mean you will no longer see advertisements from us or on our online services. It means that the online ads that you do see from DAA program participants should not be based on your interests. We are not responsible for the effectiveness of, or compliance with, any third-parties’ opt-out options or programs or the accuracy of their statements regarding their programs. In addition, third parties may still use cookies to collect information about your use of our online services, including for analytics and fraud prevention as well as any other purpose permitted under the DAA’s principles.

10. **MAINTAINING AND UPDATING YOUR ACCOUNT INFORMATION**

As part of your use of the Services, you are responsible for maintaining and updating, as applicable, your account information with current and complete information. You may edit and delete portions of your account information. To do this, select “My Account” in the main menu and choose which information to edit or delete. You can also delete your MiniTon account entirely. To do this, select “Help Center” in the main menu. Further select “Contact Us” and select “Disable Account” to request for your account to be deleted.After receiving any requested changes to your account information or personal information, we will make reasonable efforts to ensure that all of your personal information stored in databases we actively use to operate the Services will be updated, corrected, changed, or deleted as appropriate, as soon as reasonably practicable. However, we reserve the right to retain in our archival files any information we remove from or change in our active databases, subject to any obligations under any applicable law. Where permissible, we may retain such information to resolve disputes, troubleshoot problems, and enforce our Terms of Service. In addition, it may not be technologically possible to remove every record of the information you have previously provided us, as a copy may exist in a non-erasable form that will be difficult or impossible for us to locate.

11. **EFFECTIVE DATE; POLICY CHANGES**

Our business changes frequently and this Privacy Policy is subject to change from time to time. If we make any material changes to this Privacy Policy, we will notify individuals by email to their registered email address, by prominent posting on our Service, or through other appropriate communication channels. We will also update the “Effective Date” at the beginning of this Privacy Policy.

12. **CONTACT US**

To contact us with your questions or comments regarding this Privacy Policy or the information collection and dissemination practices of the MiniTon SDK, please email us at <support@mvp.games>.<br>


# User Terms & Conditions

Welcome to MiniTon! We hope you’ll enjoy being a part of our community by participating in online gaming challenges, competitions and tournaments offered by those certain third-party developer partners who have integrated their games with MiniTon’s SDK (collectively, “Competitions”) and using other applications, tools and services offered by third-party developer partners who have integrated MiniTon’s SDK into their Competitions and that may be provided from time to time (together with Competitions, the “Services”). YOU ACKNOWLEDGE THAT YOUR ABILITY TO PARTICIPATE IN COMPETITIONS AND USE THE SERVICES OFFERED BY THIRD PARTY DEVELOPERS DOES NOT ESTABLISH MiniTon AS A PROVIDER OF COMPETITIONS OR THE SERVICES.BY REGISTERING FOR AN ACCOUNT WITH US (your “Account”), USING THE SERVICES IN ANY WAY, CLICKING “I ACCEPT” BELOW, DOWNLOADING ANY APPLICATION INTEGRATED WITH MiniTon’S SDK (as further defined in Section 2.2 below, “Software”), OR REGISTERING FOR OR PARTICIPATING IN ANY COMPETITIONS, YOU: (A) ACKNOWLEDGE THAT YOU HAVE READ THESE TERMS AND CONDITIONS OF SERVICE AND ALL OBLIGATIONS AND RULES THAT MAY BE INCLUDED WITHIN EACH COMPETITION IN WHICH YOU PARTICIPATE (“Rules”) (these Terms and Conditions of Service, the terms of any policy incorporated herein, and the Rules are collectively referred to as the “Terms”) IN THEIR ENTIRETY; (B) AGREE TO BE BOUND BY THE TERMS; AND (C) ARE AUTHORIZED AND ABLE TO ACCEPT THESE TERMS. If you don’t wish to be bound by the Terms, do not click “I accept” and do not register with MiniTon (“MiniTon”, “we” or “us”) and do not use the Services. Declining to accept these Terms means you will be unable to participate in Competitions or use your MiniTon account.

1. **GENERAL TERMS**

**1.1. ARBITRATION.** TO THE MAXIMUM EXTENT PERMITTED UNDER APPLICABLE LAW, ANY CLAIM, DISPUTE OR CONTROVERSY OF WHATEVER NATURE (“CLAIM”) ARISING OUT OF OR RELATING TO THESE TERMS AND/OR OUR SOFTWARE OR SERVICES MUST BE RESOLVED BY FINAL AND BINDING ARBITRATION IN ACCORDANCE WITH THE PROCESS DESCRIBED IN SECTION 14 BELOW. PLEASE READ SECTION 14 CAREFULLY. TO THE MAXIMUM EXTENT PERMITTED UNDER APPLICABLE LAW, YOU ARE GIVING UP THE RIGHT TO LITIGATE (OR PARTICIPATE IN AS A PARTY OR CLASS MEMBER) ALL DISPUTES IN COURT BEFORE A JUDGE OR JURY.**1.2. Changes to the Terms.** We may amend, change, modify or revise the Terms at any time, and we may post a notice on our website at (“Website”) of any material changes, and you can see when these Terms were last revised by referring to the “Updated” legend above. Your continued participation in Competitions and/or use of Software or Services means you accept any new or modified Terms. You are responsible for reviewing the Terms for any changes, so please check back here from time to time.**1.3. Eligibility.** You may not modify these Terms except in writing signed by both you and MiniTon. For purposes of these Terms, “writing” does not mean an email nor an electronic/facsimile signature.**1.3.1. United States (U.S.).** To be eligible to register an Account, to participate in any Competition or receive Services, and/or to download Software, you must: (a) be a natural person who is at least 18 years of age or older, and who is personally assigned to the email address submitted during your Account registration; (b) have the power to enter into a contract with MiniTon; (c) be physically located within the U.S. when accessing your Account and participating in Competitions; (d) be physically located within a U.S. state in which participation in the Competition you select is unrestricted by that state’s laws; and (e) at all times abide by these Terms. If any one of these requirements is not met at any time, we, as agent for our developer partners, may suspend or close your Account with or without notice.**1.3.2. Non-U.S.** To be eligible to register an Account, to participate in any Competition or receive Services, and/or to download Software, you must: (a) be a natural person who is at least 18 years of age or older, and who is personally assigned to the email address submitted during your Account registration; (b) have the power to enter into a contract with MiniTon; (c) be physically located in a jurisdiction in which participation in the Competition you select is permitted and unrestricted by that state or country’s laws; and (d) at all times abide by these Terms. If any one of these requirements is not met at any time, we, on behalf of our developer partners, may suspend or close your Account with or without notice.**1.4. Registration.** MiniTon will automatically create an Account for you based on your Telegram ID. The Telegram ID is needed to participate in the Services. Please keep your Telegram Account secret because you are responsible for all activity in your Account. Although we may offer a feature that allows you to “save” or “remember” your password, this feature makes it possible for third parties to access your Account, so please use that feature prudently because such use is at your own risk. We may, in our sole discretion, reject, change, suspend and/or terminate your username.**1.5. Your Account.** As the holder of your Account, you are solely responsible for complying with these Terms, and only you are entitled to all benefits accruing thereto. You may not allow any other person to (i) access your Account; (ii) access Services or Software through your Account; or (iii) accept or use prizes, winnings and other representative of value (including without limitation digital trophies, virtual currency or virtual goods) (collectively “Winnings”). Neither your Account nor Winnings nor any Digital Assets (defined in Section 10.3) are transferable to any other person or account. You must immediately notify us of any unauthorized use of your password or identification or any other breach or threatened breach of our security or the security of your Account in any MiniTon-enabled game.**1.6. Personal Location Data:** As a part of this service, on behalf of our developer partners, we collect location information from your device. If you would like to opt out of having this information collected, you can disable location access to any game with the MiniTon SDK through the Settings menu on your mobile device.**1.7. Use of Information Collected:** By upgrading an account and providing an email address, users authorize MiniTon to provide them with important announcements, relevant promotions, and other related communications relating to the Service, Software and Competitions. Users will always have the opportunity to opt out of these communications at any time.**1.8 Employee Policy:** MiniTon employees may use the Services and/or Software for the purpose of testing the user experience, but may not withdraw money. MiniTon directors, contractors, affiliates, or partners may use the Website, Services and/or Software without such limitation, but only if they do not have any access to non-public information relating to the Services and/or Software that would lead to any advantage in their play using the Services and/or Software.

2. **SERVICES AND SOFTWARE**

**2.1. The Services.** On behalf of our developer partners, we may, with or without notice to you: (1) modify, suspend or terminate your access to the Website, Services and/or Software for any reason without liability; and (2) interrupt the operation of the Website, Services and/or Software as necessary to perform maintenance, error correction, or other work. As agent for our developer partners, we may suspend and/or close the account of any user who violates, or whom we reasonably believe may be in violation of or will violate, these Terms, at any time without notice and without liability. Also, and without limiting our other rights or remedies, if we believe you have violated these Terms or if you have violated these Terms, as agent for our developer partners, we may determine that your Winnings, if any, will be forfeited, disgorged or recouped.**2.2. Software.** If you wish to participate in Competitions or receive Services, you may be required to first enter certain Telegram applications from our third-party developer partners which have integrated MiniTon’s SDK (together with the content included therein, any associated documentation, and any application program interfaces, license keys, and patches, updates, upgrades, improvements, enhancements, fixes and revised versions of any of the foregoing, is collectively “Software”). If you do not enter through Telegram, you will not be able to participate in Competitions or receive relevant Services. Whether you download the Software directly or from a third party, such as via an app store, your use of the Software is subject to these Terms. We license the Software to you under Section 10.2.**2.3. Remote Access and Updates.** We and/or our developer partners choose to offer technical support for Software from time to time in our discretion. Such technical support may require that we or our developer partners remotely access your device on which the Software is installed (“Device”). Also, if and when our developer partners update the Software or deploy patches, updates, and modifications to the MiniTon SDK integrated into the Software, as applicable, we may do so through remote access of your Device without your knowledge. You hereby consent to these activities. You acknowledge that if we or our developer partners cannot remotely access your Device, then the Software may no longer work, and this may prevent you from participating in Competitions or otherwise receiving Services. We and/or our developer partners’ access to your Device will be limited solely to (i) providing support (ii) updating the Software or (iii) determining your location for skill-gaming regulatory purposes only, and is governed by the terms of our Privacy Policy.**2.4. Beta Releases.** For any Service that is identified by us or our developer partners as a “beta” version (“Beta Service”), you acknowledge and agree that a Beta Service may contain more or fewer features than the final release of the Service. We and our developer partners reserve rights not to release a final release of a Beta Service or to alter any such Beta Services’ features, specifications, capabilities, functions, licensing terms, release dates, general availability or other characteristics. Beta Services may not be suitable for production use and may contain errors affecting proper operation and functionality.**2.5. Third Party Sites.** You may be able to access third-party websites or services via the Software, Services or Website. We are not responsible for third-party websites, services, or content available through those third-party services. You are solely responsible for your dealings with third-parties (including advertisers and game developers). Your use of third-party software, websites or services may be subject to that third-party’s terms and conditions.

3. **COMPLIANCE WITH LAWS**

**3.1. Prohibited US States/Countries.** You acknowledge that various rules, regulations and laws addressing sweepstakes, contests, and tournaments with entry fees and/or prizes govern your participation in Competitions (“Gaming Laws”), and that Gaming Laws are set up by each individual US state, country, territory, or jurisdiction. Therefore, the Software DOES NOT permit Cash Competitions (as defined in section 8.3) to be offered to users participating in Competitions in any state in which such Competition violates its Gaming Laws (“Prohibited Jurisdiction”), and if you are located in any Prohibited Jurisdiction then you may not participate in Cash Competitions. In the United States, Prohibited Jurisdictions, as of the “Updated” date above, include: Arkansas, Connecticut, Delaware, Louisiana, and South Dakota. For card games, Prohibited Jurisdictions include Maine and Indiana. For Dominoes Gold, Prohibited Jurisdictions include New Jersey. It is your responsibility to determine whether the state, country, territory or jurisdiction in which you are located is a Prohibited Jurisdiction. Together with our developer partners, we reserve the right (but have no obligation) to monitor the location from which you access Services, and on behalf of our developer partners, we may block access from any Prohibited Jurisdiction. Each time you log in to participate in a Cash Competition, you must accurately confirm the location from which you are playing.**3.2. Additional Laws.** In addition to Gaming Laws, you are also subject to all municipal, state and federal laws, rules and regulations of the city, state and country in which you reside and from which you access and use Services, including without limitation U.S. export laws (together with Gaming Laws, the “Applicable Laws”). You are solely responsible for your compliance with all Applicable Laws. Access to Competitions may not be legal for some or all residents of, or persons present in, certain jurisdictions. SERVICES AND COMPETITIONS ARE VOID WHERE PROHIBITED OR RESTRICTED BY APPLICABLE LAWS. Your participation in Competitions is at your own risk, and you agree not to hold us responsible or liable if Applicable Laws restrict or prohibit your access or participation.**3.3. LEGAL DISCLAIMERS.** WE MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, AS TO THE LAWFULNESS OF YOUR PARTICIPATING IN ANY COMPETITION OFFERED BY OUR DEVELOPER PARTNERS OR USE OF SERVICES, NOR SHALL ANY PERSON AFFILIATED, OR CLAIMING AFFILIATION, WITH US HAVE AUTHORITY TO MAKE ANY SUCH REPRESENTATIONS OR WARRANTIES.

4. **YOUR REPRESENTATIONS AND WARRANTIES TO US**

You represent and warrant to us that (1) you have the right, authority, and capacity to agree to these Terms, to register for an Account, and to participate in those Competitions for which you register; and (2) you will comply with these Terms when participating in Competitions, receiving Services, and/or using Software; and (3) all information you supply to us or our developer partners is complete, accurate and current (and knowingly submitting incomplete or inaccurate information, or failing to update and maintain current, complete and accurate information, may result, without limitation, in immediate termination of your Account and forfeiture of Winnings).

5. **YOUR INDEMNIFICATION OF US**

You will, at your own cost and expense, indemnify and hold us and our directors, officers, employees and agents harmless from and against any and all claims, disputes, liabilities, judgments, settlements, actions, debts or rights of action, losses of whatever kind, and all costs and fees, including reasonable legal and attorneys’ fees, arising out of or relating to (i) your breach of these Terms; (ii) any use of your Account, the Website, the Software and the Services by any person including yourself; (iii) your violation of Applicable Laws; and/or (iv) your negligence or misconduct; and, if we instruct you in writing, you will, at your cost and expense, defend us from any of the foregoing using counsel reasonably acceptable to us.

6. **PRIVACY**

**6.1. Privacy Policy.** We are committed to your privacy, and our Privacy Policy, the terms of which are incorporated into these Terms as if set forth in their entirety, explains the policies put in place and used by us to protect your privacy as you visit the Website, participate in Competitions, download and use the Software and receive Services, and its terms are made a part of these Terms by this reference. We receive, store and use all information that you submit to the Website and all information you submit in registering for and participating in Services, in accordance with the Privacy Policy, so please read it carefully. We also collect anonymous aggregated and/or statistical data reflecting your use of the Website and Services and may use such data for tracking, reporting and other activities in connection with our business, also all in accordance with the Privacy Policy. We will not intentionally disclose any personally identifying information about you (including information submitted in creating an Account, your social security number, your email address, phone number, or passport, information obtained by the Website from cookies, and information regarding your IP address) to third parties without your consent except (1) where expressly specified in these Terms, (2) where expressly specified in the Privacy Policy, and/or (3) where we, in good faith, believe such disclosure is necessary to comply with Applicable Laws, to enforce these Terms against you, or to help prevent a loss of life or physical injury or crime.**6.2. Communications with You.** As also detailed in the Privacy Policy, we may use emails, text messages, and push notifications to notify you when you win our developer partners’ Competitions, when a Competition you have entered has completed, and to let you know of special promotions, events and policy changes. We may also communicate with you via email, text message, push notification or chat for any other purpose relating to Services or Software. We or our representatives may monitor all communications made by or received by you while using the Website and Services. If you do not wish to receive these communications from us, you may opt out by emailing <support@mvp.games>, but you acknowledge that opting out may result in your inability to participate in our developer partners’ Competitions or receive Services.**6.3. Device Information.** Using the Software and Services requires an Internet connection to our servers, and we (on behalf of our developer partners) or our developer partners may need to collect certain information from you and your Internet-enabled device (“Device”) in order to make the Software and Services available to you, such as hardware system profile data, internet connection data and any other data related to the operation of the Service from any Device that logs onto the Service using your Account. We will use this information in accordance with the Privacy Policy.**6.4. Warning.** Please take care in sending us sensitive information because third parties can unlawfully intercept or access transmissions or private communications between you and us, and you acknowledge that internet transmissions are never completely private or secure. For your safety, you should never reveal any sensitive personal information in any MiniTon-enabled public forums, message boards or chat features.**6.5. Promotional Activities.** By registering for an Account, you allow us and/or our developer partners to publicly display your username and tournament records, and to use this information for any purpose. By using the Services, you allow us and our developer partners to print, publish, broadcast and use, worldwide, in any media and at any time, your name, picture, voice, likeness, and/or any biographical information that you submit to us or our developer partners (“Biographical Information”) for promotional, marketing or related business purposes, without compensation to you. However, we will never sell your Biographical Information without your prior written consent, and our use of your personally identifiable information is always governed by our Privacy Policy.**6.6. Gameplay Dialogue.** On behalf of our developer partners, we may use third party websites and technologies to record or stream gameplay or chat dialogue occurring through the Services, including your own dialogue (“Recordings”). We use Recordings to verify compliance with these Terms and as part of marketing and promotion of the Services. Please do not submit personally identifiable information in gameplay dialogue—this information is available for anyone to see and use. You may record and distribute your own recordings of gameplay dialogue for non-commercial purposes (i.e., you may not record or distribute Recordings for compensation) so long as your recording and distribution: (a) do not include other products or services that are competitive with the Services, and (b) comply with these Terms.**6.7. Children.** The Services will not knowingly accept personal information from anyone under 18 years old. If you believe that a child under 18 has gained access to the Services, please contact us at <support@mvp.games>. On behalf of ourselves and our developer partners, we have taken commercially reasonable steps to restrict use of Services to those who are at least 18 years old. As agent for our developer partners, we do not sell products or services for purchase by minors.

7. **ACCEPTABLE USE POLICY**

**7.1. Rules of Conduct.** You are personally responsible for your use of Services and Software, and while using Services and Software you must conduct yourself in a lawful and respectful manner in accordance with our rules of conduct below. We may temporarily or permanently ban users who violate these rules, or who abuse email communications, support communications, or the community purpose of any message board areas, as determined by us and our developer partners, in our sole discretion. We and our developer partners reserve the right to disable a player’s ability to upload profile photos or edit their username at any time.

* Profanity, obscenities, or the use of **asterisks** or other “masking” characters to disguise such words, is not permitted.
* You may not use or upload obscene, lewd, slanderous, pornographic, abusive, violent, insulting, indecent, threatening and harassing language of any kind, as determined by us in our sole discretion.
* Service usernames will be displayed as ‘Your Name’; impersonating other players is not allowed.
* Do not share personal information (your name, phone number, home address, and password) with other users.
* Do not transmit or upload any copyrighted or trademarked materials in messages or postings.
* Information disclosed in chat rooms, message boards, gameplay dialogue or via eMessages is revealed to the public, and neither we, nor our developer partners, is responsible for information you choose to disclose to others.
* Advanced fonts, java, tables, html or other programming codes or commands are not allowed in messages.
* You may not attempt to participate in any Service by means of automatic, macro, programmed or similar methods.
* You may not commit fraud with regard to any Service.
* You may not attempt to impersonate or deceive another user for the purposes of illicitly obtaining cards, passwords, account information etc. (aka “scamming”).

You may not make any commercial use of any of the information provided on the Website or through the Services nor make any use of the Website or Services for the benefit of a business.**7.2. Your Content.** You acknowledge that the Service is a passive conduit for user content and that: (i) neither we, nor our developer partners, pre-screen user content or communications or (ii) control, verify or pay for any user content or communications. We do not endorse, and specifically disclaim any responsibility or liability for, any publicly posted content. In addition, as agent for our developer partners, we may terminate your access to any public forums at any time, without notice, for any reason whatsoever, and/or delete, move or edit content submitted publicly, in whole or in part. You may only upload, send, and receive messages and material that is related to the subject matter of the public forums, complies with Applicable Laws, and conforms to any additional terms of service posted in the public forums. You may not upload to, distribute, or otherwise publish any content, information, or other material that (a) violates or infringes the copyrights, patents, trademarks, service marks, trade secrets, or other proprietary rights of any person; (b) is libelous, threatening, defamatory, obscene, indecent, pornographic, or could give rise to any civil or criminal liability under U.S. or international law; or (c) includes any bugs, viruses, worms, trap doors, Trojan horses or other harmful code or properties. Submissions or opinions expressed by users are that of the individual expressing such submission or opinion only. Subject to the foregoing, as agent for our developer partners, we may edit, refuse to post, or to remove any information or materials submitted, in our discretion. You may not use a false email address, pretend to be someone other than yourself or otherwise mislead us or third parties as to the origin of your submissions or content.**7.3. Cheating, Fraud, and Abuse.** In accessing or participating in Services or using the Software, you represent and warrant to us and our developer partners that you will not engage in any activity that interrupts or attempts to interrupt the operation of the Services or Software. Anyone who engages in, participates in or displays behavior that may be interpreted, in the discretion of us and our developer partners only, as unfair methods in participating in Services or using the Software, including but not limited to, the opening and/or use of multiple accounts (e.g., You may not have more than one registered account with the same personal information, such as your name, email address, phone number, mobile device, and payment method) the use of unauthorized or altered software or hardware to assist play (e.g., bots, bot nets, and collusion with bots), intentionally poor play in certain games to achieve competitive advantage, collusion with other players (e.g. intentionally losing rematches in Cash Competitions), deliberate transfer of money between accounts (e.g., “money laundering”), harassment of other participants, posting objectionable material, breach of these Terms, breach of security of your Account, or any other act (whether through the use of automated technology or otherwise) that unfairly alters your chance of winning or constitutes the commission of fraud (collectively, “Abuse”), you will be subject to immediate sanction (as determined by us and our developer partners only), which may include, without limitation: (1) immediate termination of your Account and blocking of your access to the Website and Services; (2) any Winnings that you may otherwise have been entitled to receive shall be void and forfeited; (3) any Winnings received by you shall be subject to disgorgement and/or recoupment; and (4) you may be charged a fine of up to $1,000 for engaging in unfair methods. In addition to the foregoing, as agent for our developer partners, we reserve the right to disclose or report any money laundering similar illegal activity to law enforcement and regulatory authorities. Without limiting our other available remedies, we, solely, or in conjunction with our developer partners, may institute or seek any injunctive relief, civil and/or criminal proceedings against you and/or any of your co-conspirators arising out of or related to your commission of Abuse, including without limitation recovering all of our and/or our developer partners’ fees and expenses (including reasonable attorneys’ fees) in connection with such efforts.**7.4. Hacking, Tampering, or Unauthorized Access.** Any attempt to gain unauthorized access to systems or any other user’s account, interfere with procedures or performance of Services, Software or the Website or deliberately damage or undermine the Services or Software is subject to civil and/or criminal prosecution and will result in immediate termination of your Account and forfeiture of your Winnings. You acknowledge that we are not responsible for any damage, loss or injury resulting from hacking, tampering or other unauthorized access or use of the Services or your Account.**7.5. Restrictions.** Any use, reproduction or redistribution of the Service, Software, or related products or services (including without limitation, Digital Assets) not expressly authorized by these Terms is expressly prohibited. You may not engage in, or assist others to engage in, conduct that would damage or impair our property including, without limitation: (a) copying, distributing, transmitting, displaying, performing, framing, linking, hosting, caching, reproducing, publishing, licensing, or creating derivative works from any information, software, products or services obtained from us; (b) providing unauthorized means through which others may use Services such as through server emulators; (c) taking actions that impose an unreasonable or disproportionately large load on network infrastructure, or that could damage, disable, overburden or impair our Websites or Services; (d) interfering with any other party’s use and enjoyment of Services and/or Software (including cheating) or the Website; and/or (e) attempting to gain unauthorized access to third party accounts, the Service or Software.

8. **WINNINGS, ACCOUNT FUNDS, AND PAYMENTS**

**8.1. Fees.** Fees and payments for Services that you pay to participate in Competitions (“Fees”) and billing procedures are detailed in the billing application. If Fees are charged to your Account, you agree to pay those Fees. All Fees are stated in U.S. Dollars, must be prepaid and are non-refundable. You are fully responsible and liable for all charges, deposits and withdrawals made under your Account, including any unauthorized charges, deposits or withdrawals. The price of Services may change at any time, but no price change will affect your past purchases.**8.2. Billing.** As agent for our developer partners, we may change Fees and billing procedures by updating the billing application with or without notice to you. By providing a payment method, you (i) represent that you are authorized to use the payment method that you provided and that any payment information you provide is true and accurate; (ii) authorize us, as agent for our developer partners, to charge you for the Services using your payment method; and (iii) authorize us, as agent for our developer partners, to charge you for any paid feature of the Services that you choose to sign up for. As agent for our developer partners, we may bill you (a) in advance; (b) at the time of purchase; or (c) shortly after purchase, in our sole discretion. You must tell us within 120 days after an error first appears on your bill for an investigation of the charge to occur promptly. After 120 days from the first appearance of the error, neither we nor our developer partners (i) will be liable for any losses resulting from the error and (ii) will be required to correct the error or provide a refund. If we or our developer partners identifies a billing error, it will be corrected within 90 days. You must pay for all reasonable costs we, as agent for our developer partners, incur to collect any past due amounts, including without limitation reasonable attorneys’ fees and other legal fees and costs.**8.3. Cash Deposits.** If you play games integrated in a Competition without depositing U.S. Dollars into your Account for that Competition, then you are a “Non-Cash Player” with respect to such Competition. However, if you play in a Competition that requires an entry paid in U.S. Dollars or USDT Token (“Cash Competition”), then you are a “Cash Player”, and if you establish a positive Account balance for entry fees for Cash Competitions, then you must submit and maintain at all times the following current and correct information: your full name, your permanent residential address, your phone number and your credit card or other payment information. Participating in Cash Competitions may require establishing a positive Account balance in any amount we or our developer partners determine. If you are a Cash Player, by submitting this information, you consent to allowing us and our developer partners to share your personal and payment information in confidence with third party service providers for the purposes of validating your identity and assessing the transaction risk associated with accepting your selected method of payment, and for any other purpose as detailed in our Privacy Policy. If you make a credit card deposit, an authorization request will be submitted to the issuing bank of at least Ten U.S. Dollars (US$10.00) to your credit limit, even if the actual amount charged may be lower. When you withdraw funds from your account, you may be required to submit your social security number or other identifying information. Failure to provide your social security number or other requested identifying information at that time may result in inability to process your withdrawal for any winnings.**8.4. Bonus Funds.** If you are a Cash Player then you may be granted bonus funds and/or credits (“Bonus Funds”). Bonus Funds can be used to enter Cash Competitions, but cannot be withdrawn or used for any other Service. When you enter a Cash Competition, US$0.01 (one U.S. cent) of Bonus Funds will be used to enter the competition for every US$0.10 (ten U.S. cents) spent on the Cash Competition entry fee. Notwithstanding the foregoing, additional Bonus Funds will be used to enter Cash Competitions if Bonus Funds are the only currency available in your account. When you win a Cash Competition, any Bonus Funds that you have used to pay the entry fee will be returned to you and any additional winnings beyond your entry fee will be paid in U.S. Dollars or USDT Token. If you initiate a withdrawal of funds from your Account, you will forfeit all Bonus Funds currently in your Account. If you do not enter a Cash Competition within a continuous 60 day time period, all Bonus Funds in your account will be forfeited.**8.5. Withdrawals.** If you are a Cash Player and your account balance is greater than US$100 (one hundred U.S. dollars), you may request a withdrawal of funds from your available Account balance at any time. Bonus Funds cannot be withdrawn. Processing of requested funds is made by check or by refund to the payment method used to make your deposit and may take up to ninety (90) days; provided, however, that we, as agent for our developer partners, may freeze your Account and/or delay a request for withdrawal of funds pending completion of any investigation of reported or suspected Abuse, verification of eligibility or to comply with Applicable Laws. A check request processing fee of up to $20.00 for any withdrawal of less than $100.00 may be assessed.**8.6. Closing Accounts; Forfeiture of Funds.** If you close your Account, funds in your Account will be returned subject to the terms of Section 8.5. If your Account is unilaterally closed or terminated for cause as allowed in these Terms, funds in your Account may be forfeited and not returned to you. If your funds are forfeited by you in accordance with this Section or Sections 2.1, 4, 7.3, 7.4, 7.5 or 8.9 hereof, these funds may be used to defray the costs of administration and enforcement of these Terms, allocated or disbursed such amounts to other Services or donated these funds.**8.7. Account Monthly Maintenance Fee.** If your Account is inactive (i.e. you have not entered at least one (1) tournament) for six (6) consecutive months or more, a maintenance fee of $2.00 per month may be charged (the “Monthly Maintenance Fee”). After five or more months of inactivity you will be notified by email that if your Account remains inactive for one more month, the Monthly Maintenance Fee will be deducted from your Account each consecutive month after that that it remains inactive. The Monthly Maintenance Fee will not be deducted from your Account if there are no funds in your Account. However, if your Account has no funds and has been inactive for twelve or more consecutive months, your Account may be closed.**8.8. Refund Policy.** Unless otherwise required by law, no refunds are given.**8.9. Winnings.** If you are eligible to receive Winnings, in our capacity as agent for our developer partners, we may require that you provide proof that you are, or were at the time of your participation in the subject Competition, eligible to participate in accordance with these Terms and that your participation was in accordance with these Terms. If you do not provide such proof to our or our developer partners’ reasonable satisfaction, then you will not receive the relevant Winnings. If you receive a payment in error, we, as agent for our developer partners, may reverse or require return of the payment. You agree to cooperate with our efforts to do this, in our capacity as agent for our developer partners. We may also reduce payment to you without notice to adjust for any previous overpayment.**8.10. Credit Card/PayPal Use.** When you pay for any charges by credit card, you represent to us that you are the authorized user of such credit card. You must promptly notify us of any changes to your credit card account number, its expiration date and/or your billing address, or if your credit card expires or is canceled for any reason. We are not liable for any loss caused by any unauthorized use of your credit card or other method of payment by a third party (such as PayPal) in connection with the Services. Any attempt to defraud through the use of credit cards or other methods of payment, regardless of the outcome, or any failure by you to honor legitimate charges or requests for payment, will result in immediate termination of your Account, forfeiture of Winnings, and pursuit of civil litigation and/or criminal prosecution.**8.11. Taxes.** If you are a U.S. resident, we, as agent for our developer partners, may send you an IRS Form W-9 and 1099-MISC or other appropriate form if your Winnings total $600 or more in any given calendar year. Depending on the state in which you reside, we may also send you additional federal or state tax forms. Without limiting the foregoing, as agent for our developer partners, we may withhold from your existing Account balance and/or from future Winnings any amount required to be withheld by Applicable Laws, including amounts due in connection with your failure to complete relevant tax documentation, but you remain solely responsible for paying all federal, state and other taxes in accordance with all Applicable Laws.

9. **COPYRIGHT COMPLAINTS**

The Digital Millennium Copyright Act (DMCA) provides copyright owners who believe that their rights under the United States copyright law have been infringed by acts of third parties over the Internet with ways to protect their rights. If you believe that your copyrighted work has been copied without your authorization and is available in the Services in a way that may constitute copyright infringement, you can provide notice of your claim to the designated agent listed below. For your notice to be effective, it must include the following information:

1. A physical or electronic signature of a person authorized to act on behalf of the owner of the intellectual property right that is allegedly infringed;
2. A description of the copyrighted work that you claim has been infringed upon;
3. A description of where the material that you claim is infringing is located in this game; Information reasonably sufficient to permit us to contact the complaining party, such as address, telephone number, and, if available, an e-mail address at which the complaining party can be contacted;
4. A statement by you that you have a good-faith belief that the disputed use is not authorized by the copyright owner, its agent, or the law; and
5. A statement that the information in the notification is accurate and, under penalty of perjury, that the complaining party is authorized to act on behalf of the owner of the exclusive right that is allegedly infringed.

MiniTon’ Designated Agent is: Multiverse Play Pte. Ltd. Attn: <support@mvp.games>.

10. **PROPRIETARY RIGHTS**

**10.1. Your Content.** Subject to these Terms, you grant to us a worldwide, perpetual, unrestricted, royalty-free license to use, copy, modify, distribute, publish, perform, transmit and display any and all communications, materials, content and information that you submit to us or our developer partners, whether directly or through the Website, Services or Software (“Content”), and waive any moral rights you may have in Content. Subject to these Terms, any communication or material you transmit to us, including any data, questions, comments, suggestions or the like, will be treated by us and our developer partners as non-confidential and non-proprietary. Subject to these Terms, we and our developer partners may use Content for any purpose, without any compensation, accounting or other liability or obligation to you. If you use or share Content in a way that infringes others’ copyrights, trademarks, other intellectual property rights or privacy rights, you are breaching these Terms. You represent and warrant to us and our developer partners that for the duration of these Terms you have (and will have) all the rights necessary for the Content you upload or share on the services and that the use of the Content, as contemplated in this Section will not violate any Applicable Laws. If your Account is cancelled or terminated, we and our developer partners may permanently delete your Content from our servers and we have no obligation to return Content to you.**10.2. Software License.** Subject to these Terms, we grant to you a personal, nonexclusive, limited, non-transferable, non-assignable, non-sublicensable, limited license to install and run the Software, in object code format only, on a Device owned or controlled by you, solely for the purpose of accessing and using the Services in accordance with these Terms, and solely for so long as your Account is open. You acknowledge that you are receiving licensed rights only. You may not network the Software among devices. You may not directly or indirectly, or authorize any person or entity to: (i) reverse engineer, decompile, disassemble, re-engineer or otherwise create or attempt to create or permit, allow or assist others to create the source code of the Software or its structural framework; (ii) create derivative works of the Software; (iii) use the Software in whole or in part for any purpose except as expressly provided herein; or (iv) disable or circumvent any access control or related device, process or procedure established with respect to the Software. You acknowledge that you have access to sufficient information such that you do not need to reverse engineer the Software in any way to permit other products or information to interoperate with the Software. You are responsible for all use of the Software that is under your possession or control.**10.3. Digital Assets.** Some Blockchain Services and Software may allow you to create digital objects, such as avatars, NFT(*Non-fungible token), FT(Fungible Token)*. Such digital objects, in addition to any digital or virtual objects or assets we assign to your Account, such as “Z”, virtual trophies or virtual goods, are collectively referred to as “Digital Assets”. You acknowledge that because all Digital Assets are created through the Blockchain Software and/or Services, you solely and exclusively own all Digital Assets. To the extent we do not automatically own any Digital Asset, you hereby irrevocably, expressly and automatically assign to us, in perpetuity, all right, title and interest in and to any such Digital Assets, including, without limitation, all copyrights, patent rights, trade secrets, trademarks, moral rights and all other applicable proprietary and intellectual property rights throughout the world. Subject to these Terms, you grant us an unlimited license to use Digital Assets through your own Account solely for purposes and in furtherance of your use of Services.**10.4. Ownership.** All content of the Website, all MiniTon products and services, all MiniTon logos, symbols, expansion names and symbols, play level symbols, trade dress or “look and feel”, all Digital Assets and those portions of the Software and Services which are property of MiniTon as well as all derivative works or modifications of any of the foregoing, and all related and underlying intellectual property (including without limitation patents, trademarks, trade secrets and copyrights), are our sole and exclusive property. We reserve all rights not expressly granted herein. Except as expressly set forth herein, no right or license is granted hereunder, express or implied or by way of estoppel, to any intellectual property rights and your use of Services and/or Software does not convey or imply the right to use the Services or Software in combination with any other information or products.

11. **TERM AND TERMINATION**

These Terms apply to you and to us from the date that you accept them as provided above, until termination of your Account (whether by deactivation, cancellation, closure, expiration or termination by you or us). You may terminate these Terms at any time and for any reason by going to your Account webpage and following the account closure process. Upon termination of your Account, you must immediately discontinue use of the Services and the Software and your Account and promptly uninstall and delete all copies of the Software. Immediately upon termination of your Account, all license and rights granted to you under these Terms automatically terminate and you shall automatically forfeit the right to use Digital Assets. Your obligation to pay accrued Fees will survive any termination of these Terms. Any and all terms and conditions within these Terms which should, by their nature, survive termination of these Terms, will survive such termination (including without limitation Sections 3.3, 4, 5, 6, 8.6, 8.7, 8.9, 8.10, 10.3 and 12 through 15 (inclusive).

12. **DISCLAIMERS**

In conjunction with our developer partners, we strive to keep Services up and running; however, all online services suffer occasional disruptions and outages, and we are not responsible or liable for any disruption or loss you may suffer as a result. You should regularly backup content that you store on the Services.TO THE MAXIMUM EXTENT PERMITTED UNDER APPLICABLE LAW, ALL SERVICES, PRODUCTS, INFORMATION AND DATA PROVIDED OR MADE AVAILABLE BY US OR OUR DEVELOPER PARTNERS (INCLUDING WITHOUT LIMITATION DIGITAL ASSETS AND SOFTWARE) ARE “AS IS” AND WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, AND YOU ASSUME THE ENTIRE RISK WITH RESPECT THERETO. WE MAKE NO REPRESENTATION, WARRANTY OR GUARANTEE THAT SERVICES, YOUR ACCOUNT, SOFTWARE, THE WEBSITE AND/OR DIGITAL ASSETS WILL BE SECURE, VIRUS-FREE, UNINTERRUPTED OR ERROR-FREE, OR THAT THE SAME WILL FUNCTION PROPERLY IN COMBINATION WITH ANY THIRD PARTY COMPONENT, TECHNOLOGY, HARDWARE, SOFTWARE OR SYSTEM.We are not responsible or liable for any damage, loss or injury resulting from, relating to or arising out of (1) use, access or attempted use or access of Services, Digital Assets, the Software or the Website; (2) downloading any information from the Software, Services or Website; and/or (3) violations of these Terms by other users. We have no responsibility to enforce these terms for the benefit of any user. Some states do not allow the disclaimer of implied warranties; as such the foregoing disclaimer may not apply to you in its entirety.

13. **LIMITATIONS OF LIABILITY**

TO THE MAXIMUM EXTENT PERMITTED UNDER APPLICABLE LAW, NEITHER WE, NOR OUR DEVELOPER PARTNERS, SUPPLIERS OR LICENSORS, WILL BE LIABLE TO YOU OR ANY THIRD PARTY FOR ANY INDIRECT, SPECIAL, PUNITIVE, CONSEQUENTIAL (INCLUDING, WITHOUT LIMITATION, LOST PROFITS, LOST DATA OR LOSS OF GOODWILL) OR INCIDENTAL DAMAGES, ARISING OUT OF OR RELATING TO THESE TERMS, THE WEBSITE OR ANY INFORMATION, SERVICES, PRODUCTS OR SOFTWARE MADE AVAILABLE OR ACCESSIBLE TO YOU, WHETHER BASED ON A CLAIM OR ACTION OF CONTRACT, WARRANTY, NEGLIGENCE, STRICT LIABILITY OR OTHER TORT, BREACH OF ANY STATUTORY DUTY, INDEMNITY OR CONTRIBUTION OR OTHERWISE, EVEN IF WE OR OUR DEVELOPER PARTNERS, THIRD PARTY SUPPLIERS OR LICENSORS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH LIABILITY.TO THE MAXIMUM EXTENT PERMITTED UNDER APPLICABLE LAW, OUR MAXIMUM LIABILITY TO YOU ARISING OUT OF OR IN ANY WAY CONNECTED TO THESE TERMS SHALL NOT EXCEED U.S. $50.00. THE EXISTENCE OF ONE OR MORE CLAIMS BY YOU WILL NOT INCREASE OUR LIABILITY. IN NO EVENT SHALL OUR DEVELOPER PARTNERS, SUPPLIERS OR LICENSORS HAVE ANY LIABILITY ARISING OUT OF OR IN ANY WAY CONNECTED TO OUR PRODUCTS, INFORMATION OR SERVICES.Certain jurisdictions do not allow limitations of liability for incidental, consequential or certain other types of damages; as such, the limitations and exclusions set forth in this Section may not apply to you.

14. **DISPUTE RESOLUTION AND ARBITRATION**

**14.1. General**. This Section applies to any Dispute except for Disputes relating to the enforcement or validity of our intellectual property rights. The term “Dispute” means any dispute, action or other controversy between you and us concerning these Terms, the Services or any product, service or information we make available to you, whether in contract, warranty, tort, statute, regulation, ordinance or any other legal or equitable basis. “Dispute” will be given the broadest possible meaning allowable under law. In the event of a Dispute, you or we must give the other a Notice of Dispute, which is a written statement that sets forth the name, address and contact information of the party giving it, the facts giving rise to the Dispute, and the relief requested. You must send any Notice of Dispute by U.S. Mail to MiniTon Customer Support: <Support@mvp.games>. We will send any Notice of Dispute to you by U.S. Mail to your address if we have it, or otherwise to your email address. You and we will attempt to resolve any Dispute through informal negotiation within sixty (60) days from the date the Notice of Dispute is sent. After sixty (60) days, either you or we may commence arbitration. You may also litigate any Dispute in small claims court in your county of residence or San Francisco, California, if the Dispute meets all requirements to be heard in the small claims court. You may litigate in small claims court whether or not you negotiated informally first.**14.2. Binding arbitration**. If you and we do not resolve any Dispute by informal negotiation or in small claims court, any other effort to resolve the Dispute will be conducted exclusively by binding arbitration as described in this Section. Instead, all Disputes will be resolved before a neutral arbitrator, whose decision will be final except for a limited right of appeal under the Federal Arbitration Act. Any court with jurisdiction over the parties may enforce the arbitrator’s award.**14.3. Class action waiver.** To the maximum extent permitted under applicable law, any proceedings to resolve or litigate any Dispute in any forum will be conducted solely on an individual basis. Neither you nor we will seek to have any Dispute heard as a class action or in any other proceeding in which either party acts or proposes to act in a representative capacity. No arbitration or proceeding will be combined with another without the prior written consent of all parties to all affected arbitrations or proceedings. If this waiver is found to be illegal or unenforceable as to all or some parts of a Dispute, then it won’t apply to those parts. Instead, those parts will be severed and proceed in a court of law, with the remaining parts proceeding in arbitration.**14.4. Arbitration procedure.** This Agreement shall be construed in accordance with the laws of Singapore and the parties hereby irrevocably submit to the non-exclusive jurisdiction of the Courts of Singapore. Any arbitration will be conducted by the Singapore Arbitration Association under its Commercial Arbitration Rules. In a Dispute involving $1,000,000 or less, any hearing will be telephonic unless the arbitrator finds good cause to hold an in-person hearing instead. The arbitration shall be conducted in English and the English version of these Terms (and not any translation) shall control, and both parties hereby agree to accord this arbitration agreement the broadest scope admissible under applicable Laws, and that it shall be interpreted in a non-restrictive manner. The arbitrator may award the same damages to you individually as a court could. The arbitrator may award declaratory or injunctive relief only to you individually, and only to the extent required to satisfy your individual claim. These Terms govern to the extent they conflict with the arbitrators’ commercial rules. The arbitrator may award compensatory damages, but shall NOT be authorized to award non-economic damages, such as for emotional distress, or pain and suffering or punitive or indirect, incidental or consequential damages. Each party shall bear its own attorneys’ fees, cost and disbursements arising out of the arbitration, and shall pay an equal share of the fees and costs of the arbitrator; however, the arbitrator may award to the prevailing party reimbursement of its reasonable attorneys’ fees and costs (including, for example, expert witness fees and travel expenses), and/or the fees and costs of the arbitrator. Within fifteen (15) calendar days after conclusion of the arbitration, the arbitrator shall issue a written award and a written statement of decision describing the material factual findings and conclusions on which the award is based, including the calculation of any damages awarded. Judgment on the award may be entered by any court of competent jurisdiction. The parties waive their right to commence any action or judicial proceeding in connection with a dispute hereunder, except for purposes of: (i) recognition and/or enforcement of the arbitration award or any other decision by the arbitral tribunal, (ii) obliging the other party to participate in the arbitration proceedings, (iii) requesting any type of conservative or interim measure in connection with the dispute prior to the constitution of the arbitral tribunal, (iv) requesting the appearance of witnesses and/or experts, and/or (v) requesting that any information and/or documentation discovery be complied with. By agreeing to this binding arbitration provision, you understand that you are waiving certain rights and protections which may otherwise be available if a claim or Dispute were determined by litigation in court, including, without limitation, the right to seek or obtain certain types of damages precluded by this arbitration provision, the right to a jury trial, certain rights of appeal, the right bring a claim as a class member in any purported class or representative proceeding, and the right to invoke formal rules of procedure and evidence.**14.5. Claims or Disputes.** Must be filed within one month. To the extent permitted by applicable law, any claim or Dispute under these Terms must be filed within one month from the date of the cause of action. If a claim or dispute isn’t filed within one month, it’s permanently barred.**14.6. Equitable Relief.** You agree that we would be irreparably damaged if these Terms were not specifically enforced. Therefore, in addition to any other remedy we may have at law, and notwithstanding our agreement to arbitrate Disputes, we are entitled without bond, other security, or proof of damages, to seek appropriate equitable remedies with respect to your violation of these Terms in any court of competent jurisdiction.**14.7 Language of the Terms:** If we provide a translated version of these Terms, the User Terms of Service, the Developer Terms and Conditions of Service, the Affiliate Program Terms of Service, the MiniTon Privacy Policy, or any other terms or policy, it is for informational purposes only. If the translated version means something different than the English version, then the English meaning will be the one that applies.

15. **MISCELLANEOUS**

These Terms constitute the entire agreement between you and us pertaining to the subject matter hereof and supersede all prior or other arrangements, understandings, negotiations and discussions, whether oral or written. These Terms cannot be modified by you, and may only be modified by us as provided above. Our failure to require or enforce strict performance by you of any provision of these Terms or to exercise any right under them shall not be construed as a waiver or relinquishment of our right to assert or rely upon any such provision or right in that or any other instance. The provisions of these Terms are intended to be severable. If for any reason any provision of these Terms shall be held invalid or unenforceable in whole or in part by any court of competent jurisdiction, such provision shall, as to such jurisdiction, be ineffective to the extent of such determination of invalidity or unenforceability without affecting the validity or enforceability thereof in any other manner or jurisdiction and without affecting the remaining provisions of the Terms, which shall continue to be in full force and effect. Section titles in these Terms are for reference only and have no legal effect. No right or remedy of ours shall be exclusive of any other, whether at law or in equity, including without limitation damages injunctive relief, attorneys’ fees and expenses. We may assign these Terms, in whole or in part, at any time without notice to you. You may not assign these Terms or transfer any rights to use the Services or Software. You consent to our providing you notifications about the Services or information the law requires us to provide via email to the address that you specified when you created your Account. Notices emailed to you will be deemed given and received when the email is sent. If you do not consent to receive notices electronically, you must close your Account. These Terms are solely for your and our benefit, and not for the benefit of any other person, except for our successors and assigns. A printed version of these Terms and of any notice given in electronic form will be admissible in judicial or administrative proceedings based upon or relating to these Terms to the same extent and subject to the same conditions as other business documents and records originally generated and maintained in printed form. Please send any questions or comments (including all inquiries unrelated to copyright infringement) to: MiniTon Customer Support: <support@mvp.games>. Please print these Terms for your records.


