Asset Store
Discover high-quality assets for your next game project, or create your own with AI.
Create AssetDiscover high-quality assets for your next game project, or create your own with AI.
Create Asset
Made with Nano Banana 2 Lite · CC0 · 9 Oct 2026
Generated from: a scene from a small video game about: -- MUTATION FARM -- Script principal do servidor -- Local: ServerScriptService > MutationFarmServer local Players = game:GetService("Players") local ReplicatedStorage = game:GetService("ReplicatedStorage") local DataStoreService = game:GetService("DataStoreService") local Store = DataStoreService:GetDataStore("MutationFarm_V1") local START_COINS = 100 local START_SEEDS = 5 local PLOT_SPACING = 75 local Plants = { { Name = "Frutalume", Cost = 10, Value = 20, Growth = 20, Color = Color3.fromRGB(255, 220, 70) }, { Name = "Melancia Rubra", Cost = 25, Value = 55, Growth = 35, Color = Color3.fromRGB(235, 65, 95) }, { Name = "Flor Tempestade", Cost = 60, Value = 140, Growth = 50, Color = Color3.fromRGB(100, 190, 255) } } local Mutations = { { Name = "Melancia Solar", Value = 180, Chance = 0.12, Color = Color3.fromRGB(255, 165, 35) }, { Name = "Cacto Prisma", Value = 260, Chance = 0.055, Color = Color3.fromRGB(180, 70, 255) }, { Name = "Fruta Galactica", Value = 500, Chance = 0.015, Color = Color3.fromRGB(50, 255, 220) } } local Remotes = ReplicatedStorage:FindFirstChild("MutationFarmRemotes") if not Remotes then Remotes = Instance.new("Folder") Remotes.Name = "MutationFarmRemotes" Remotes.Parent = ReplicatedStorage end local Notify = Remotes:FindFirstChild("Notify") if not Notify then Notify = Instance.new("RemoteEvent") Notify.Name = "Notify" Notify.Parent = Remotes end local SelectSeed = Remotes:FindFirstChild("SelectSeed") if not SelectSeed then SelectSeed = Instance.new("RemoteEvent") SelectSeed.Name = "SelectSeed" SelectSeed.Parent = Remotes end local World = workspace:FindFirstChild("MutationFarmWorld") if World then World:Destroy() end World = Instance.new("Folder") World.Name = "MutationFarmWorld" World.Parent = workspace local PlayerData = {} local PlayerPlots = {} local SelectedSeeds = {} local UsedPlotNumbers = {} local function SendMessage(player, message) Notify:FireClient(player, message) end local function CreatePart(parent, name, size, position, color, material) local p = Instance.new("Part") p.Name = name p.Size = size p.Position = position p.Anchored = true p.Color = color p.Material = material or Enum.Material.SmoothPlastic p.TopSurface = Enum.SurfaceType.Smooth p.BottomSurface = Enum.SurfaceType.Smooth p.Parent = parent return p end local function CreateLabel(object, text) local gui = Instance.new("BillboardGui") gui.Name = "FloatingLabel" gui.Size = UDim2.fromOffset(190, 45) gui.StudsOffset = Vector3.new(0, 3, 0) gui.AlwaysOnTop = true gui.Parent = object local label = Instance.new("TextLabel") label.Size = UDim2.fromScale(1, 1) label.BackgroundTransparency = 1 label.Text = text label.TextColor3 = Color3.new(1, 1, 1) label.TextStrokeTransparency = 0.2 label.Font = Enum.Font.GothamBold label.TextScaled = true label.Parent = gui return label end local function CreatePrompt(object, action, description) local prompt = Instance.new("ProximityPrompt") prompt.ActionText = action prompt.ObjectText = description prompt.MaxActivationDistance = 12 prompt.HoldDuration = 0 prompt.RequiresLineOfSight = false prompt.Parent = object return prompt end local function GetCoins(player) local stats = player:FindFirstChild("leaderstats") return stats and stats:FindFirstChild("Moedas") end local function AddCoins(player, amount) local coins = GetCoins(player) if coins then coins.Value = math.max(0, coins.Value + amount) end end local function UpdateAttributes(player) local data = PlayerData[player] if not data then return end player:SetAttribute("Sementes", data.Seeds) player:SetAttribute("Colheitas", data.Harvests) player:SetAttribute("Mutacoes", data.Mutations) end local function SavePlayer(player) local data = PlayerData[player] if not data then return end local coins = GetCoins(player) local savedData = { Coins = coins and coins.Value or START_COINS, Seeds = data.Seeds, Harvests = data.Harvests, Mutations = data.Mutations, Selected = SelectedSeeds[player] or 1 } local success, err = pcall(function() Store:SetAsync("Player_" .. player.UserId, savedData) end) if not success then warn("Falha ao salvar " .. player.Name .. ": " .. tostring(err)) end end local function LoadPlayer(player) local data = { Seeds = START_SEEDS, Harvests = 0, Mutations = 0 } local coins = START_COINS local success, saved = pcall(function() return Store:GetAsync("Player_" .. player.UserId) end) if success and type(saved) == "table" then coins = tonumber(saved.Coins) or START_COINS data.Seeds = tonumber(saved.Seeds) or START_SEEDS data.Harvests = tonumber(saved.Harvests) or 0 data.Mutations = tonumber(saved.Mutations) or 0 SelectedSeeds[player] = math.clamp( tonumber(saved.Selected) or 1, 1, #Plants ) else SelectedSeeds[player] = 1 end PlayerData[player] = data local leaderstats = Instance.new("Folder") leaderstats.Name = "leaderstats" leaderstats.Parent = player local coinValue = Instance.new("IntValue") coinValue.Name = "Moedas" coinValue.Value = coins coinValue.Parent = leaderstats UpdateAttributes(player) end local function RollMutation() local roll = math.random() local total = 0 for _, mutation in ipairs(Mutations) do total += mutation.Chance if roll <= total then return mutation end end return nil end local function CreatePlant(soil, plantName, color, isRare) local old = soil:FindFirstChild("PlantModel") if old then old:Destroy() end local model = Instance.new("Model") model.Name = "PlantModel" model.Parent = soil local center = soil.Position + Vector3.new(0, 1.2, 0) local stem = CreatePart( model, "Caule", Vector3.new(0.35, 1.3, 0.35), center + Vector3.new(0, -0.25, 0), Color3.fromRGB(65, 170, 75), Enum.Material.Grass ) local fruit = CreatePart( model, plantName, Vector3.new(1.3, 1.3, 1.3), center + Vector3.new(0, 0.65, 0), color, isRare and Enum.Material.Neon or Enum.Material.SmoothPlastic ) fruit.Shape = Enum.PartType.Ball if isRare then local light = Instance.new("PointLight") light.Color = color light.Brightness = 1.5 light.Range = 9 light.Parent = fruit end CreateLabel(fruit, plantName) model.PrimaryPart = fruit return model end local function SetupPlanting(player, soil, slotNumber) local prompt = CreatePrompt( soil, "Plantar", "Espaco " .. slotNumber ) soil:SetAttribute("State", "Empty") prompt.Triggered:Connect(function(who) if who ~= player then SendMessage(who, "Este terreno pertence a outro jogador!") return end local data = PlayerData[player] if not data then return end local state = soil:GetAttribute("State") -- PLANTAR if state == "Empty" then if data.Seeds <= 0 then SendMessage(player, "Voce esta sem sementes! Visite a loja.") return end local seedIndex = SelectedSeeds[player] or 1 local plant = Plants[seedIndex] data.Seeds -= 1 UpdateAttributes(player) soi, as an in-game screenshot in a hand-drawn ink and watercolour style. Palette: paper #f2e8cf, ink #283618, player tomato #bc4749, threat plum #6d597a, accent leaf #a7c957. Everything is original: never draw or resemble characters, places or logos from existing games, films or brands (no red-capped plumbers, no famous mascots), even when the idea names one. Keep the pictures honest: they promise what a small first version of this game, made in a game engine in a few days, can look like. Simple readable shapes, clear silhouettes, few flat materials, the in-game camera view. Never film stills, photoreal renders, AAA key art, detailed textures, cinematic lighting, or anything that looks like a big-studio game. No text, UI, HUD, logos or editor screens inside any image.
Creator
Vinicius Damiani
Sign in to join the conversation.
Sign in to comment🌍CC0
Use, share, and remix the model freely with no restrictions and no attribution needed.