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 · 3 Oct 2026
Generated from: a scene from a small video game about: Create “Alec’s Splash Arena” as a complete, compilable, mobile-first, high-poly 3D third-person water-fight prototype with a cosmetic shop and progression economy. Use Godot 4.3 and GDScript 2.0. Deliver a runnable project, not a design description or pseudocode. Define the project architecture before the implementation: Exact Godot version, renderer, target platforms, minimum device profile, build assumptions, authority model, and a cosmetic economy model. Directory tree for scenes, scripts, resources, materials, meshes, animations, UI, tests, shop assets, player skins, cosmetics, save data, and configuration assets. Main scene hierarchy and required child nodes for the game manager, match manager, arena, player, weapon, AI rivals, objective, HUD, camera, touch controls, audio, pooling, shop, inventory, progression, and debug systems. Complete project configuration, input map, physics layers and masks, navigation layers and areas, gameplay tags, rendering settings, quality presets, save/configuration format, wallet rules, cosmetic ownership rules, shop rotation rules, and startup validation rules. Required assets and procedural or placeholder replacements so the project runs without proprietary content. Include placeholder cosmetic icons, skin materials, shop panels, currency icons, and preview mannequins. Touch layout with safe-area handling, configurable virtual sticks, action buttons, shop navigation controls, aim assistance, auto-sprint, camera controls, haptics, accessibility options, and optional keyboard, mouse, and controller bindings. Test strategy covering unit tests, integration tests, in-game validation, economy tests, purchase validation, save/load tests, performance budgets, memory, thermal behavior, frame pacing, and device profiles. Provide complete files for every script, scene, resource, shader, configuration asset, shop item definition, cosmetic definition, inventory resource, save-data resource, and test. All code must compile in Godot 4.3 and work together as one playable project. Use typed GDScript where practical, consistent naming, signals, interfaces, exported properties, error handling, deterministic or seeded gameplay calculations, and reusable components. Include setup steps, run instructions, expected debug output, success criteria, and fallback behavior for every system. Example core files: "project.godot" ; Godot 4.3 project configuration config_version=5 [application] config/name="Alec's Splash Arena" run/main_scene="res://scenes/main.tscn" [display] window/size/viewport_width=1280 window/size/viewport_height=720 window/size/window_width_override=1280 window/size/window_height_override=720 window/stretch/mode="canvas_items" [rendering] renderer/rendering_method="gl_compatibility" renderer/rendering_method.mobile="gl_compatibility" textures/default_filters/use_nearest_mipmap_filter=false [input] move_left={ "deadzone": 0.2, "events": [Object(InputEventKey,"physical_keycode":65)] } move_right={ "deadzone": 0.2, "events": [Object(InputEventKey,"physical_keycode":68)] } move_forward={ "deadzone": 0.2, "events": [Object(InputEventKey,"physical_keycode":87)] } move_back={ "deadzone": 0.2, "events": [Object(InputEventKey,"physical_keycode":83)] } jump={ "deadzone": 0.2, "events": [Object(InputEventKey,"physical_keycode":32)] } fire={ "deadzone": 0.2, "events": [Object(InputEventMouseButton,"button_index":1)] } aim={ "deadzone": 0.2, "events": [Object(InputEventMouseButton,"button_index":2)] } "scenes/main.tscn" [gd_scene load_steps=2 format=3] [ext_resource path="res://scripts/game_manager.gd" type="Script" id="1"] [node name="Main" type="Node3D"] script = ExtResource("1") [node name="WorldEnvironment" type="WorldEnvironment" parent="."] [node name="Arena" type="Node3D" parent="."] [node name="Player" type="CharacterBody3D" parent="."] [node name="CameraRig" type="SpringArm3D" parent="Player"] spring_length = 5.0 [node name="Camera3D" type="Camera3D" parent="Player/CameraRig"] current = true [node name="HUD" type="CanvasLayer" parent="."] [node name="HealthBar" type="ProgressBar" parent="HUD"] offset_left = 32.0 offset_top = 32.0 offset_right = 292.0 offset_bottom = 48.0 max_value = 100.0 value = 100.0 modulate = Color(0.2, 0.9, 0.25, 1) [node name="HealthBackground" type="ColorRect" parent="HUD"] offset_left = 28.0 offset_top = 28.0 offset_right = 296.0 offset_bottom = 52.0 color = Color(0.25, 0.12, 0.06, 1) mouse_filter = 2 [node name="ShieldBackground" type="ColorRect" parent="HUD"] offset_left = 28.0 offset_top = 64.0 offset_right = 296.0 offset_bottom = 88.0 color = Color(0.25, 0.12, 0.06, 1) mouse_filter = 2 [node name="ShieldBar" type="ProgressBar" parent="HUD"] offset_left = 32.0 offset_top = 68.0 offset_right = 292.0 offset_bottom = 84.0 max_value = 100.0 value = 100.0 modulate = Color(0.15, 0.45, 1.0, 1) "scripts/game_manager.gd" extends Node3D class_name GameManager enum MatchPhase { WARMUP, ACTIVE, OVERTIME, VICTORY, DEFEAT, RESTART, REPLAY, LOBBY } @export var required_ai_defeats: int = 5 @export var match_time_seconds: float = 300.0 @export var enable_ai_count_victory: bool = true var phase: MatchPhase = MatchPhase.WARMUP var ai_defeated: int = 0 var reward_granted: bool = false var match_time_remaining: float signal phase_changed(new_phase: MatchPhase) signal ai_progress_changed(current: int, required: int) signal match_completed(victory: bool, reward: Dictionary) func _ready() -> void: match_time_remaining = match_time_seconds _validate_startup() _start_match() func _process(delta: float) -> void: if phase != MatchPhase.ACTIVE and phase != MatchPhase.OVERTIME: return match_time_remaining = maxf(0.0, match_time_remaining - delta) if enable_ai_count_victory and ai_defeated >= required_ai_defeats: _trigger_victory() elif match_time_remaining <= 0.0: _enter_overtime_or_defeat() func register_ai_defeat() -> void: if phase == MatchPhase.VICTORY or phase == MatchPhase.DEFEAT: return ai_defeated += 1 ai_progress_changed.emit(ai_defeated, required_ai_defeats) if enable_ai_count_victory and ai_defeated >= required_ai_defeats: _trigger_victory() func _start_match() -> void: phase = MatchPhase.ACTIVE phase_changed.emit(phase) func _trigger_victory() -> void: if reward_granted: return phase = MatchPhase.VICTORY phase_changed.emit(phase) var reward := _calculate_reward() reward_granted = true match_completed.emit(true, reward) func _enter_overtime_or_defeat() -> void: if phase == MatchPhase.OVERTIME: _trigger_defeat() else: phase = MatchPhase.OVERTIME phase_changed.emit(phase) match_time_remaining = 30.0 func _trigger_defeat() -> void: if reward_granted: return phase = MatchPhase.DEFEAT phase_changed.emit(phase) var reward := _calculate_reward() reward_granted = true match_completed.emit(false, reward) func _calculate_reward() -> Dictionary: var placement_reward: int = 100 if phase == MatchPhase.VICTORY else 25 var defeat_reward: int = ai_defeated * 10 var total: int = clampi(placement_reward + defeat_reward, 10, 500) return { "placement": placement_reward, "ai_defeats": defeat_reward, "total": total } func _validate_startup() -> void: var required_nodes := ["Arena", "Player", "HUD"] for node_name in required_nodes: if get_node_or_null(node_name) == null: push_error("Startup validation failed: missing node %s" % node_name) "scripts/player_controller.gd" extends CharacterBody3D class_name PlayerController @export var move_speed: float = 5.0 @export var sprint_speed: float = 8.0 @export var acceleration: float = 18.0 @export var deceleration: float = 24.0 @export var jump_velocity: float = 6.0 @export var gravity: float = 18.0 @export var coyote_time: float = 0.12 @export var jump_buffer_time: float = 0.15 var coyote_timer: float = 0.0 var jump_buffer_timer: float = 0.0 var health: float = 100.0 var shield: float = 100.0 var soaked: float = 0.0 func _physics_process(delta: float) -> void:, as an in-game screenshot in flat colour 2D shapes with a bright limited palette. Palette: sky blue #8ecae6, grass #3a7d44, player sunflower #ffb703, threat red #d62828, accent white #fdfcdc. 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
Alec Hunter
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.