diff --git a/examples/turnip-town/README.md b/examples/turnip-town/README.md index 97ae7b3481b5d..33182d70f8280 100644 --- a/examples/turnip-town/README.md +++ b/examples/turnip-town/README.md @@ -1,37 +1,44 @@ # Turnip Town -Turnip Town is an end-to-end demo of a simulation game that continues -running when the player is not interacting with it and supports -tradeable NFTs that can be bought and sold through Kiosks, (where the -game publisher receives a royalty on each sale). +Turnip Town is an end-to-end demo of a simulation game implemented as +a Kiosk App where players can interact with each other's assets. It +supports tradeable NFTs that can be bought and sold through Kiosks, +(where the game publisher receives a royalty on each sale). ## Highlights The demo illustrates how to: -- **share ownership** between the game, which needs to run the simulation, - and the player who wants a sense of ownership over their instance of - the game, using `Deed`s. +- **share ownership** between players, while preserving a player's + sense of ownership over their assets (only they can perform certain + privileged actions). +- allow a game to interact with a player's Kiosk, to **place** items in + there for sale. - define a transfer policy for in-game assets, to enforce **royalties**. -- architect the game's back-end service to take advantage of Sui's +- architect the game's front-end to take advantage of Sui's **parallelism** and programmable transaction blocks to update the simulations across multiple fields, concurrently. -- **query Sui's RPC** to get the necessary information to visualize on the - front-end. +- **query Sui's RPC** to get the necessary information to visualize on + the front-end. ## Premise In Turnip Town, players plant fields with turnips and must return to -them daily to ensure they have enough water to grow. While they are -not playing, the game simulates weather: Rain adds water to the field, -and sunshine allows turnips to use up the water in their fields to -grow. +them daily to ensure they have enough water to grow. Other players can +visit your field, and help you take care of your turnips (growing them +or harvesting them for you). -Players must balance how much water is in the field: Too little water, -and turnips will dry up, too much and they will get water-logged and -rot, becoming less fresh in both cases. With just the right amount of -water, turnips will keep growing, but watch out, because the bigger a -turnip grows, the more water it needs to stay fresh. +Each player has a well from which they get the same amount of water +every epoch. If that water is not used, it is wasted (it does not +accumulate). They are free to use this water wherever they like (in +their own field, or in another player's). + +Players must balance how much water each turnip gets: Too little +water, and turnips will dry up, too much and they will get +water-logged and rot, becoming less fresh in both cases. With just the +right amount of water, turnips will keep growing, but watch out, +because the bigger a turnip grows, the more water it needs to stay +fresh. ## Deploying @@ -43,18 +50,18 @@ To keep the initial version of the demonstration focussed, the following possible extensions have not been implemented, but are left as an exercise for the reader! - - Defining **Display** for `Turnip` and `Deed` to visualize them in + - Defining **Display** for `Turnip` and `Field` to visualize them in Explorers. - - Using **on-chain randomness** to control how much rain and sun a - field gets, rather than deciding that off-chain in the game - service. + - Extending the `Turnip`'s transfer policy to reward players who + contributed to the turnip every time it is sold. + - Implementing weather using **on-chain randomness** to control how + much rain and sun a field gets. - Integrating with a **weather oracle** and augmenting `Field`s with a location, so that the `Field` benefits from the real-world weather at its location. - **Genetics** to add variety to how each turnip responds to the weather, and to offer the possibility for cross-pollination and breeding. - - Supporting the **app extension** pattern and generalising `Field` - so the game can support growing different kinds of produce, - including "seasonal" produce (only possible to grow at certain, - restricted times). + - Generalising `Field` so the game can support growing different + kinds of produce, including "seasonal" produce (only possible to + grow at certain, restricted times).