Mint a plot.
Build a city.
The NFT is the score.
bitsLAND is a fully on-chain pixel-art city builder. Every action you take in the game upgrades the NFT itself: it earns XP, accumulates Prestige in ETH, unlocks achievements, and visibly evolves through six trait axes. The art is generated by the contract as an animated SVG, so what you see in your wallet is always the live state of your plot.
Eight examples, fully rendered on-chain.
These are not mockups. They are running the same SVG renderer that the contract emits. Every NFT you mint will look like one of these on day one and look very different six months later as your city grows, your prestige climbs, and your achievements pile up.
Three contracts, one closed loop.
You own the NFT. The game contract reads from it on every move. Every paid action flows to treasury and bookkeeps Prestige back onto your NFT. The renderer pulls it all together into an animated, mutable image you can see on any marketplace.
Mint your plot
First per wallet is free. After that, 0.001 ETH each. Wallet cap is 10. Genesis traits roll at mint (Climate, Terrain, Aura, Generation, Founder flag) and seal forever.
BitsLand.mintFree() / mintPaid(qty)
Register and build
Call register() once to activate your plot. Place buildings from a catalog of 50 (residential, commercial, industrial, services, utilities, parks). Each costs a small amount of ETH that scales with tier.
BitsCore.placeBuilding(plotId, x, y, id)
Tick and survive
Call tick() to refresh population, roll the disaster RNG, and award XP. Disasters damage buildings; repair them with another small ETH payment. The mood of the day modifies happiness from minus ten to plus twelve percent.
BitsCore.tick(plotId)
Watch the NFT evolve
Every ETH wei spent records as Prestige on your NFT. Crossing thresholds (0.001 / 0.01 / 0.05 / 0.1 / 0.5) bumps it from Bronze through Mythic, each tier painting a brighter border in the rendered art and boosting happiness.
tokenURI() renders it all on-chain
Genesis traits — rolled once, sealed forever.
Five independent axes are determined at the moment of mint by hashing your address, the plot ID, and the block hash. Once written to the contract they cannot be re-rolled. Some of them are pure cosmetic flavor (the climate dictates the weather effect that drifts across your plot); some change the math (an aura discount or a founder bonus); all of them are permanent.
The weather your plot lives under.
The climate sets the animated weather overlay (sand drift, snowfall, rain, ash, neon glow) and modifies happiness by a small fixed amount each tick. Volcanic plots pay a steeper happiness penalty but earn a "Resilient" status flag faster. Cyber plots get the highest bonus but cost more in disaster repairs.
| Climate | Happiness mod | Visual |
|---|---|---|
| Temperate | +5% | clean sky |
| Desert | -5% | sand drift |
| Polar | -5% | snowfall |
| Tropical | +5% | rain streaks |
| Volcanic | -10% | rising ash |
| Cyber | +10% | neon glow |
A 25% discount on one building category.
The aura is a glyph that rotates in the corner of your NFT and unlocks a permanent 25% discount on the ETH cost of one category of building. Trade gets cheap commercial buildings; War gets cheap utilities; Faith gets cheap parks. Match your strategy to your aura and you'll build a sprawling city for less.
| Aura | Discount on | Glyph |
|---|---|---|
| Order | residential | ring |
| Chaos | industrial | triangle |
| Trade | commercial | diamond |
| War | utility | square |
| Faith | parks | star |
| Tech | services | cross |
| Wild | parks | triangle |
| Void | none | pierced disc |
The ground your city sits on.
Terrain is rendered in the bottom third of the SVG and adds a small terrain layer (a shimmering coastline, sparse forest pixels, a drifting cloud beneath floating cities). It feeds into the rarity calculation that marketplaces will compute when ranking your plot.
- Flat — the default grass landscape
- Hilly — mixed grass and dirt, rougher contour
- Coastal — water-edge with animated shimmer
- Forest — sparse green pixel-trees along the horizon
- Wasteland — dirt-tone ground, no vegetation
- Floating — night-sky ground with clouds drifting underneath
When you joined matters.
Plots 1 through 200 are the Founders: a permanent +5% happiness multiplier and a yellow tape marquee around the rendered art with "FOUNDER" embossed across the top edge. Founder plots are visibly distinct on every marketplace listing.
Beyond the Founder set, every plot also carries its Generation:
| Generation | Plot IDs |
|---|---|
| Gen 1 | #1 to #1,000 |
| Gen 2 | #1,001 to #5,000 |
| Gen 3 | #5,001 to #10,000 |
Generation is a soft signal — it doesn't change the math, but it's a permanent marker of when you joined and surfaces on the NFT metadata.
Level + XP — a real climb, not a daily check-in.
Every game action grants experience to your NFT. XP is stored on-chain. Your level is computed live as floor(sqrt(xp / 50)), which means each level costs more than the last. Levels gate which tiers of building you can place, so the climb directly determines how much of the catalog you can access.
Where the experience comes from.
- Calling
tick()— +10 XP - Placing a tier-N building — +5×N XP
- Repairing a damaged building — +3 XP
- Demolishing — +1 XP
So a typical play session of 5 ticks plus 10 mixed-tier placements earns roughly 50 to 150 XP, depending on what tiers you place. The XP bar on your NFT visibly fills toward the next level threshold each session.
What each level unlocks.
| Level | Cumulative XP | Unlock |
|---|---|---|
| 1 | 50 | tier-1 buildings (default) |
| 5 | 1,250 | tier-2 buildings |
| 10 | 5,000 | tier-3 buildings + Scholar |
| 15 | 11,250 | tier-4 buildings |
| 25 | 31,250 | Pixelmid + Sage |
| 50 | 125,000 | Master achievement |
Prestige — every ETH spent makes the NFT worth more.
This is the loop that solves the "why pay for actions" problem. The treasury receives 100% of the ETH you spend on every paid action. The same wei amount is recorded as Prestige on your NFT. That number is permanent and visible to anyone who looks at your plot. Crossing a threshold bumps you up a tier; each tier paints a brighter outer border on the rendered SVG and adds to the happiness multiplier.
Spending feeds Prestige, never burns it.
When you call placeBuilding with 0.0002 ETH attached, the BitsCore contract forwards every wei to treasury and calls BitsLand.addPrestige(plotId, 0.0002 ETH). The two events are atomic. There is no path where the ETH leaves your wallet without crediting your NFT.
Prestige is stored as uint128 prestigeWei on the NFT. It only ever increases. Selling the NFT transfers the Prestige to the buyer along with it.
Stacking ETH stacks the visuals.
| Tier | Border colour | Achievement |
|---|---|---|
| Bronze | warm copper, pulsing | Bronze Prestige |
| Silver | cool grey, pulsing | Silver Prestige |
| Gold | yellow, brighter pulse | Gold Prestige |
| Diamond | cyan, fast pulse | Diamond Prestige |
| Mythic | magenta, fastest pulse | Mythic Prestige |
Achievements — 32 milestones, all on-chain.
A single uint32 on the NFT holds a bitmap of every milestone you have hit. BitsCore sets bits automatically when you cross thresholds. There is no claim button, no opt-in. The moment your population crosses 5,000 or your Prestige crosses 0.05 ETH, the corresponding flag flips. Each unlocked achievement renders as a small star along the bottom of your NFT image.
14 additional achievement bits are reserved for future expansions defined in the roadmap. The 32-bit bitmap has room to grow without a contract upgrade.
Name + motto — your city, your words.
You can put real words on your plot. The name (up to 24 characters) renders along the bottom strip of the SVG and shows up as the NFT's "name" field in marketplace listings. The motto (up to 64 characters) is the description text. Both rate-limit at the contract level — the name can change once per ~7 days, the motto once per ~30 days — so collectors who like permanence can track how often a plot has been renamed via the public nameChangeCount counter.
Up to 24 printable ASCII chars.
Cooldown: 50,400 blocks (about 7 days on Ethereum mainnet). The contract validates each byte is in the printable ASCII range 0x20-0x7E so you cannot inject HTML, emoji, or control characters.
BitsLand.setName(plotId, "Steel Reef")
Up to 64 chars, once a month.
Cooldown: 216,000 blocks (about 30 days). The motto becomes the NFT's description on every marketplace that reads tokenURI — it is the one piece of long-form text you control.
BitsLand.setMotto(plotId, "Built on Base")
Visitor stamps — social, sybil-resistant.
Any wallet that already owns at least one plot can call visit(targetPlotId) on yours. They can do it once per target. The contract increments visitCount and writes a permanent flag in a per-pair map. There is no fee, no payment, just an on-chain note that someone showed up.
Why does it matter? Crossing visitor thresholds permanently unlocks popularity tiers that other players can see on the leaderboard. The tiers are visual signals of how much foot traffic a plot has earned.
The sybil-resistance is built into the contract: callers without a plot revert with NotApprovedForVisit. To farm visits you would have to spin up wallets that each minted a plot, which costs 0.001 ETH a head after the first — cheaper to just play the game.
Why every ETH spent makes the NFT worth more.
Most pay-to-play loops bleed value out. bitsLAND's loop deposits value back into the NFT. The treasury wallet receives 100% of the ETH you spend, but the same amount is also recorded as Prestige on your NFT. That Prestige is permanent. It raises the on-chain happiness multiplier, paints a brighter border, and signals real time invested to anyone who sees your plot on a marketplace.
Action ETH costs
- Tier 1 building: 0.00002 ETH
- Tier 2 building: 0.00008 ETH
- Tier 3 building: 0.0002 ETH
- Tier 4 building: 0.0005 ETH
- Pixelmid (one per plot): 0.001 ETH
- Repair damaged: 50% of placement
- Demolish: free
- Tick (refresh): free
Daily mood (deterministic)
- Recession (7% of days): -10% happiness
- Stagnant (18%): -3% happiness
- Stable (40%): no change
- Growing (25%): +5% happiness
- Boom (10%): +12% happiness
- Same mood for every plot on the same day.
- Derived from
block.number / 7200. - No oracle. No external dependency.
Build the city.
Become the city.
Free first mint per wallet. 10,000 plots total. First 200 are Founders.