Skip to content

Commit

Permalink
Update README
Browse files Browse the repository at this point in the history
  • Loading branch information
amnn authored and damirka committed Sep 23, 2024
1 parent 5284167 commit 64ee7ec
Showing 1 changed file with 34 additions and 27 deletions.
61 changes: 34 additions & 27 deletions examples/turnip-town/README.md
Original file line number Diff line number Diff line change
@@ -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

Expand All @@ -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).

0 comments on commit 64ee7ec

Please sign in to comment.