spawnpoint-studio 0.3.1__tar.gz → 0.3.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {spawnpoint_studio-0.3.1/compiler/spawnpoint_studio.egg-info → spawnpoint_studio-0.3.3}/PKG-INFO +16 -8
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/README.md +15 -7
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/analyze.py +5 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/cli.py +17 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/graph.py +1 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/sprites/ai.py +6 -0
- spawnpoint_studio-0.3.3/compiler/spawnpoint/sprites/cartoon.py +1013 -0
- spawnpoint_studio-0.3.3/compiler/spawnpoint/sprites/cartoon_monsters.py +152 -0
- spawnpoint_studio-0.3.3/compiler/spawnpoint/sprites/chibi.py +612 -0
- spawnpoint_studio-0.3.3/compiler/spawnpoint/sprites/creatures.py +337 -0
- spawnpoint_studio-0.3.3/compiler/spawnpoint/sprites/gallery.py +108 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/sprites/generate.py +235 -38
- spawnpoint_studio-0.3.3/compiler/spawnpoint/sprites/items.py +205 -0
- spawnpoint_studio-0.3.3/compiler/spawnpoint/sprites/monsters.py +220 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/studio/assemble.py +94 -12
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/studio/edits.py +1 -1
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/studio/prompts.py +21 -3
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3/compiler/spawnpoint_studio.egg-info}/PKG-INFO +16 -8
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint_studio.egg-info/SOURCES.txt +6 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/tests/test_sprites.py +323 -5
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/tests/test_studio.py +6 -3
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/examples/castle_defense.json +2 -1
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/examples/coin_hopper.json +3 -2
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/examples/dino_eggs.json +2 -1
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/examples/knight_quest.json +4 -2
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/examples/neon_arena.json +3 -2
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/examples/night_survivor.json +3 -2
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/examples/ninja_rescue.json +3 -2
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/examples/pixel_arena.json +3 -2
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/examples/pixel_hopper.json +3 -2
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/examples/star_run.json +2 -1
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/examples/sunny_farm.json +3 -2
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/components/projectile_component.gd +4 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/tools/build.gd +1 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/pyproject.toml +1 -1
- spawnpoint_studio-0.3.1/compiler/spawnpoint/sprites/cartoon.py +0 -477
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/LICENSE +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/MANIFEST.in +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/__init__.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/build.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/cockpit/__init__.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/cockpit/server.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/cockpit/static/app.css +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/cockpit/static/app.js +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/cockpit/static/index.html +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/demo.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/demo_touch.js +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/diagnostics.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/expr.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/gif.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/godot.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/level.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/llm_server.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/manifest.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/playtest/__init__.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/playtest/report.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/playtest/runner.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/playtest/tuner.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/project.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/py.typed +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/rules.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/sfx.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/sprites/__init__.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/sprites/contour.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/sprites/importer.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/sprites/motion.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/sprites/palettes.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/sprites/resolve.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/sprites/scenery.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/sprites/spriteset.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/sprites/tiles.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/studio/__init__.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/studio/brief.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/studio/creative.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/studio/dataset.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/studio/genres.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/studio/levelgen.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/studio/llm.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/studio/orchestrator.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/studio/web.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/studio/webcheck.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint/studio_cli.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint_studio.egg-info/dependency_links.txt +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint_studio.egg-info/entry_points.txt +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint_studio.egg-info/requires.txt +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/spawnpoint_studio.egg-info/top_level.txt +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/tests/conftest.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/tests/test_ai_sprites.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/tests/test_analyze.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/tests/test_cockpit.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/tests/test_demo.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/tests/test_e2e.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/tests/test_expr.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/tests/test_genres.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/tests/test_gif.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/tests/test_godot_library.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/tests/test_graph.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/tests/test_level.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/tests/test_live_llm.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/tests/test_manifest.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/tests/test_playtest.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/tests/test_rules.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/tests/test_sfx.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/compiler/tests/test_web.py +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/components/aim_component.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/components/animator_component.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/components/base_component.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/components/bubble_board_component.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/components/chase_ai_component.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/components/collectible_component.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/components/crop_pest_component.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/components/experience_component.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/components/farm_plot_component.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/components/farmer_component.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/components/flight_path_component.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/components/gate_component.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/components/ground_patch_component.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/components/health_bar_component.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/components/health_component.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/components/hitbox_component.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/components/hurtbox_component.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/components/juice_component.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/components/level_up_menu_component.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/components/market_component.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/components/path_follower_component.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/components/patrol_ai_component.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/components/platformer_movement_component.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/components/player_input_component.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/components/shmup_ship_component.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/components/spawner_component.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/components/stomp_component.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/components/top_down_movement_component.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/components/tower_brain_component.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/components/tower_builder_component.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/components/tower_slot_component.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/components/trigger_zone_component.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/components/wave_spawner_component.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/components/weapon_component.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/components/xp_orb_component.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/manifest.json +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/runtime/camera_rig.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/runtime/cockpit.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/runtime/entity_core.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/runtime/fx.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/runtime/game_state.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/runtime/hud.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/runtime/level.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/runtime/sfx.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/runtime/sp.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/runtime/world.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/shaders/flash.gdshader +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/shaders/floor_grid.gdshader +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/tools/build.tscn +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/tools/capture.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/tools/capture.tscn +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/tools/dump_manifest.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/tools/dump_manifest.tscn +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/tools/playtest.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/tools/playtest.tscn +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/tools/playtest_nav.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/tools/record.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/tools/record.tscn +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/tools/smoke.gd +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/godot/addons/spawn_point/tools/smoke.tscn +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/setup.cfg +0 -0
- {spawnpoint_studio-0.3.1 → spawnpoint_studio-0.3.3}/setup.py +0 -0
{spawnpoint_studio-0.3.1/compiler/spawnpoint_studio.egg-info → spawnpoint_studio-0.3.3}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: spawnpoint-studio
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.3
|
|
4
4
|
Summary: Turn a sentence into a juicy, playable Godot 4 game — locally, on a consumer GPU.
|
|
5
5
|
Author: smoky1496
|
|
6
6
|
License: MIT
|
|
@@ -33,7 +33,7 @@ Dynamic: license-file
|
|
|
33
33
|
[](LICENSE)
|
|
34
34
|
|
|
35
35
|
<p align="center">
|
|
36
|
-
<img src="https://raw.githubusercontent.com/leluong141996-dev/Spawn-Point/main/docs/media/knight-quest.gif" width="48%" alt="Knight's Quest: a
|
|
36
|
+
<img src="https://raw.githubusercontent.com/leluong141996-dev/Spawn-Point/main/docs/media/knight-quest.gif" width="48%" alt="Knight's Quest: a sword platformer">
|
|
37
37
|
<img src="https://raw.githubusercontent.com/leluong141996-dev/Spawn-Point/main/docs/media/castle-defense.gif" width="48%" alt="Castle Defense: a tower defense game">
|
|
38
38
|
<img src="https://raw.githubusercontent.com/leluong141996-dev/Spawn-Point/main/docs/media/ninja-rescue.gif" width="48%" alt="Ninja Rescue: a platformer where a ninja frees his mother">
|
|
39
39
|
<img src="https://raw.githubusercontent.com/leluong141996-dev/Spawn-Point/main/docs/media/dino-eggs.gif" width="48%" alt="Dino Eggs: a bubble shooter with dinosaur eggs">
|
|
@@ -42,10 +42,10 @@ Dynamic: license-file
|
|
|
42
42
|
<img src="https://raw.githubusercontent.com/leluong141996-dev/Spawn-Point/main/docs/media/star-run.gif" width="48%" alt="Star Run: a side-scrolling shooter with power-ups and a boss">
|
|
43
43
|
</p>
|
|
44
44
|
<p align="center"><sub>Seven of the demo games, each one a small JSON graph in <code>examples/</code> built from the
|
|
45
|
-
same component library: generated
|
|
45
|
+
same component library: generated pixel art, collision traced from the sprites, juice on by default.
|
|
46
46
|
Recorded with <code>spawnpoint gif</code> (autopilot).</sub></p>
|
|
47
47
|
|
|
48
|
-
<p align="center"><b><a href="https://leluong141996-dev.github.io/Spawn-Point/">▶ Play the demos in your browser</a></b>: a Mario-style platformer, a
|
|
48
|
+
<p align="center"><b><a href="https://leluong141996-dev.github.io/Spawn-Point/">▶ Play the demos in your browser</a></b>: a Mario-style platformer, a
|
|
49
49
|
knight with a sword, tower defense, a ninja rescue, a dinosaur-egg bubble shooter, a survivor with level-ups, a farming
|
|
50
50
|
game, an arena shooter and a side-scrolling space shooter. No install needed, and
|
|
51
51
|
they work on phones too (touch controls).</p>
|
|
@@ -169,10 +169,12 @@ use `--no-web` to skip and play natively with `spawnpoint run`.
|
|
|
169
169
|
|
|
170
170
|
## Sprites: generated or your own
|
|
171
171
|
|
|
172
|
-
Layer 2 replaces placeholder shapes with **procedural
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
172
|
+
Layer 2 replaces placeholder shapes with **procedural pixel art** — no assets, no GPU: chibi people with big heads, monsters with faces (a biting plant, a mushroom, a snail, a flame spirit, a reaper, an alien, a dragon, a ghost...), items, props, themed tiles and a parallax sky. Spawn Point makes pixel art games only. (A graph can still ask for the smooth `"art_style": "cartoon"` look by hand, but games made from a prompt are always pixel art.)
|
|
173
|
+
|
|
174
|
+
<p align="center"><img src="https://raw.githubusercontent.com/leluong141996-dev/Spawn-Point/main/docs/media/parade-heroes.gif" width="48%" alt="Animated heroes: knight, wizard, ranger, viking, king, princess, ninja..."> <img src="https://raw.githubusercontent.com/leluong141996-dev/Spawn-Point/main/docs/media/parade-monsters.gif" width="48%" alt="Animated monsters: slime, frog, biting plant, mushroom, snail, flame..."></p>
|
|
175
|
+
<p align="center"><sub>Every character and monster is drawn by plain Python from its name (<code>spawnpoint sprites parade --set heroes|monsters|items</code>).</sub></p>
|
|
176
|
+
|
|
177
|
+
The
|
|
176
178
|
kind follows the entity (`Goblin` → humanoid, `FireBat` → flyer, `LaserBot` → robot, `Crystal` → gem…)
|
|
177
179
|
and details follow the name (`Ninja` → mask, `Fox` → ears and tail, `Spider` → legs, a sword-wielder holds a sword).
|
|
178
180
|
Every sprite has idle / run / jump / fall / hurt animations driven automatically by an `Animator` component, plus
|
|
@@ -204,8 +206,14 @@ spawnpoint sprites import hero.png --grid 32x32 --anim idle=0-3 --anim run=4-9
|
|
|
204
206
|
spawnpoint sprites import sheet.png --rows idle,run,jump # auto-sliced by transparent gutters
|
|
205
207
|
spawnpoint sprites import kenney_frames/ # idle_0.png, walk_1.png, ...
|
|
206
208
|
spawnpoint sprites preview assets/sprites/Knight.sprite.json # contact sheet + collision outline
|
|
209
|
+
spawnpoint sprites gallery --style fine -o gallery.png # every kind on one sheet, for review
|
|
210
|
+
spawnpoint sprites parade --set monsters -o monsters.gif # an animated sheet of characters, monsters or items
|
|
207
211
|
```
|
|
208
212
|
|
|
213
|
+
Names pick the art: `Knight` gets a helmet and shield, `SkeletonArcher` a skull and a bow (and shoots
|
|
214
|
+
arrows), `HealthPotion` is a potion, `GoldKey` a key. Layer 2 scatters trees, bushes and rocks that
|
|
215
|
+
match the palette, drawn behind everything and without collision.
|
|
216
|
+
|
|
209
217
|
Record a clip of any built game to share it (a window opens for a few seconds; autopilot plays):
|
|
210
218
|
|
|
211
219
|
```bash
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
[](LICENSE)
|
|
10
10
|
|
|
11
11
|
<p align="center">
|
|
12
|
-
<img src="https://raw.githubusercontent.com/leluong141996-dev/Spawn-Point/main/docs/media/knight-quest.gif" width="48%" alt="Knight's Quest: a
|
|
12
|
+
<img src="https://raw.githubusercontent.com/leluong141996-dev/Spawn-Point/main/docs/media/knight-quest.gif" width="48%" alt="Knight's Quest: a sword platformer">
|
|
13
13
|
<img src="https://raw.githubusercontent.com/leluong141996-dev/Spawn-Point/main/docs/media/castle-defense.gif" width="48%" alt="Castle Defense: a tower defense game">
|
|
14
14
|
<img src="https://raw.githubusercontent.com/leluong141996-dev/Spawn-Point/main/docs/media/ninja-rescue.gif" width="48%" alt="Ninja Rescue: a platformer where a ninja frees his mother">
|
|
15
15
|
<img src="https://raw.githubusercontent.com/leluong141996-dev/Spawn-Point/main/docs/media/dino-eggs.gif" width="48%" alt="Dino Eggs: a bubble shooter with dinosaur eggs">
|
|
@@ -18,10 +18,10 @@
|
|
|
18
18
|
<img src="https://raw.githubusercontent.com/leluong141996-dev/Spawn-Point/main/docs/media/star-run.gif" width="48%" alt="Star Run: a side-scrolling shooter with power-ups and a boss">
|
|
19
19
|
</p>
|
|
20
20
|
<p align="center"><sub>Seven of the demo games, each one a small JSON graph in <code>examples/</code> built from the
|
|
21
|
-
same component library: generated
|
|
21
|
+
same component library: generated pixel art, collision traced from the sprites, juice on by default.
|
|
22
22
|
Recorded with <code>spawnpoint gif</code> (autopilot).</sub></p>
|
|
23
23
|
|
|
24
|
-
<p align="center"><b><a href="https://leluong141996-dev.github.io/Spawn-Point/">▶ Play the demos in your browser</a></b>: a Mario-style platformer, a
|
|
24
|
+
<p align="center"><b><a href="https://leluong141996-dev.github.io/Spawn-Point/">▶ Play the demos in your browser</a></b>: a Mario-style platformer, a
|
|
25
25
|
knight with a sword, tower defense, a ninja rescue, a dinosaur-egg bubble shooter, a survivor with level-ups, a farming
|
|
26
26
|
game, an arena shooter and a side-scrolling space shooter. No install needed, and
|
|
27
27
|
they work on phones too (touch controls).</p>
|
|
@@ -145,10 +145,12 @@ use `--no-web` to skip and play natively with `spawnpoint run`.
|
|
|
145
145
|
|
|
146
146
|
## Sprites: generated or your own
|
|
147
147
|
|
|
148
|
-
Layer 2 replaces placeholder shapes with **procedural
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
148
|
+
Layer 2 replaces placeholder shapes with **procedural pixel art** — no assets, no GPU: chibi people with big heads, monsters with faces (a biting plant, a mushroom, a snail, a flame spirit, a reaper, an alien, a dragon, a ghost...), items, props, themed tiles and a parallax sky. Spawn Point makes pixel art games only. (A graph can still ask for the smooth `"art_style": "cartoon"` look by hand, but games made from a prompt are always pixel art.)
|
|
149
|
+
|
|
150
|
+
<p align="center"><img src="https://raw.githubusercontent.com/leluong141996-dev/Spawn-Point/main/docs/media/parade-heroes.gif" width="48%" alt="Animated heroes: knight, wizard, ranger, viking, king, princess, ninja..."> <img src="https://raw.githubusercontent.com/leluong141996-dev/Spawn-Point/main/docs/media/parade-monsters.gif" width="48%" alt="Animated monsters: slime, frog, biting plant, mushroom, snail, flame..."></p>
|
|
151
|
+
<p align="center"><sub>Every character and monster is drawn by plain Python from its name (<code>spawnpoint sprites parade --set heroes|monsters|items</code>).</sub></p>
|
|
152
|
+
|
|
153
|
+
The
|
|
152
154
|
kind follows the entity (`Goblin` → humanoid, `FireBat` → flyer, `LaserBot` → robot, `Crystal` → gem…)
|
|
153
155
|
and details follow the name (`Ninja` → mask, `Fox` → ears and tail, `Spider` → legs, a sword-wielder holds a sword).
|
|
154
156
|
Every sprite has idle / run / jump / fall / hurt animations driven automatically by an `Animator` component, plus
|
|
@@ -180,8 +182,14 @@ spawnpoint sprites import hero.png --grid 32x32 --anim idle=0-3 --anim run=4-9
|
|
|
180
182
|
spawnpoint sprites import sheet.png --rows idle,run,jump # auto-sliced by transparent gutters
|
|
181
183
|
spawnpoint sprites import kenney_frames/ # idle_0.png, walk_1.png, ...
|
|
182
184
|
spawnpoint sprites preview assets/sprites/Knight.sprite.json # contact sheet + collision outline
|
|
185
|
+
spawnpoint sprites gallery --style fine -o gallery.png # every kind on one sheet, for review
|
|
186
|
+
spawnpoint sprites parade --set monsters -o monsters.gif # an animated sheet of characters, monsters or items
|
|
183
187
|
```
|
|
184
188
|
|
|
189
|
+
Names pick the art: `Knight` gets a helmet and shield, `SkeletonArcher` a skull and a bow (and shoots
|
|
190
|
+
arrows), `HealthPotion` is a potion, `GoldKey` a key. Layer 2 scatters trees, bushes and rocks that
|
|
191
|
+
match the palette, drawn behind everything and without collision.
|
|
192
|
+
|
|
185
193
|
Record a clip of any built game to share it (a window opens for a few seconds; autopilot plays):
|
|
186
194
|
|
|
187
195
|
```bash
|
|
@@ -347,6 +347,7 @@ class _Analyzer:
|
|
|
347
347
|
"eye": ent.body == "character" and sprite is None,
|
|
348
348
|
"pivot": "bottom" if g.genre == "platformer" and ent.body == "character" else "center",
|
|
349
349
|
"sprite": sprite_resolve.plan_entry(name, sprite) if sprite is not None else None,
|
|
350
|
+
"z": -1 if ent.decor else 0,
|
|
350
351
|
})
|
|
351
352
|
entities[-1]["components"] = comps
|
|
352
353
|
|
|
@@ -413,6 +414,8 @@ class _Analyzer:
|
|
|
413
414
|
}
|
|
414
415
|
|
|
415
416
|
def _layer(self, ent: Entity, team: str) -> int:
|
|
417
|
+
if ent.decor:
|
|
418
|
+
return 0
|
|
416
419
|
if ent.body == "character":
|
|
417
420
|
return {"player": L_PLAYER, "enemy": L_ENEMY}.get(team, 0)
|
|
418
421
|
if ent.body == "static":
|
|
@@ -420,6 +423,8 @@ class _Analyzer:
|
|
|
420
423
|
return 0 if "Projectile" in ent.components else L_PICKUP
|
|
421
424
|
|
|
422
425
|
def _mask(self, ent: Entity) -> int:
|
|
426
|
+
if ent.decor:
|
|
427
|
+
return 0
|
|
423
428
|
if ent.body == "character":
|
|
424
429
|
return L_WORLD
|
|
425
430
|
if ent.body == "static":
|
|
@@ -121,6 +121,12 @@ def main(argv: list[str] | None = None) -> int:
|
|
|
121
121
|
sv2.add_argument("sprite", type=Path)
|
|
122
122
|
sv2.add_argument("-o", "--out", type=Path)
|
|
123
123
|
sps.add_parser("kinds", help="list the procedural sprite kinds")
|
|
124
|
+
sga = sps.add_parser("gallery", help="render one contact sheet of every procedural kind, for review")
|
|
125
|
+
sga.add_argument("--style", choices=["pixel", "fine", "cartoon"], default="fine")
|
|
126
|
+
sga.add_argument("-o", "--out", type=Path, default=Path("sprite-gallery.png"))
|
|
127
|
+
spa = sps.add_parser("parade", help="render an animated sheet (GIF) of characters, monsters or items")
|
|
128
|
+
spa.add_argument("--set", dest="which", choices=["heroes", "monsters", "items"], default="heroes")
|
|
129
|
+
spa.add_argument("-o", "--out", type=Path, default=Path("sprite-parade.gif"))
|
|
124
130
|
|
|
125
131
|
ds = sub.add_parser("dataset", help="recorded fine-tuning data")
|
|
126
132
|
ds.add_argument("action", choices=["stats", "path"])
|
|
@@ -272,6 +278,17 @@ def _sprites(args) -> int:
|
|
|
272
278
|
for k, spec in gen.KINDS.items():
|
|
273
279
|
print(f"{k:<8} {spec.size[0]}x{spec.size[1]} px animations: {', '.join(spec.anims)}")
|
|
274
280
|
return 0
|
|
281
|
+
if args.sprites_cmd == "parade":
|
|
282
|
+
from .sprites.gallery import parade
|
|
283
|
+
frames = parade(args.which)
|
|
284
|
+
frames[0].save(args.out, save_all=True, append_images=frames[1:], duration=100, loop=0, optimize=True)
|
|
285
|
+
print(f"Wrote {args.out}")
|
|
286
|
+
return 0
|
|
287
|
+
if args.sprites_cmd == "gallery":
|
|
288
|
+
from .sprites.gallery import gallery
|
|
289
|
+
gallery(args.style).save(args.out)
|
|
290
|
+
print(f"Wrote {args.out}")
|
|
291
|
+
return 0
|
|
275
292
|
if args.sprites_cmd == "preview":
|
|
276
293
|
s = load(args.sprite)
|
|
277
294
|
out = args.out or args.sprite.with_suffix("").with_suffix(".preview.png")
|
|
@@ -75,6 +75,7 @@ class Entity(_Model):
|
|
|
75
75
|
sprite: Union[str, SpriteRef, None] = None
|
|
76
76
|
components: dict[str, dict[str, Any]] = Field(default_factory=dict)
|
|
77
77
|
juice: Union[Literal["none"], dict[str, Any], None] = None
|
|
78
|
+
decor: bool = Field(default=False, description="scenery (trees, bushes, rocks): drawn behind everything, no collision")
|
|
78
79
|
|
|
79
80
|
|
|
80
81
|
class Level(_Model):
|
|
@@ -42,6 +42,12 @@ KIND_HINT = {
|
|
|
42
42
|
"heart": "a single heart pickup", "orb": "a single glowing orb", "door": "a tall wooden door",
|
|
43
43
|
"exit": "a glowing exit doorway", "portal": "a swirling magic portal", "spikes": "a row of metal spikes",
|
|
44
44
|
"bullet": "a small glowing projectile",
|
|
45
|
+
"beast": "a small four-legged animal, side view", "spider": "a small spider, side view",
|
|
46
|
+
"dragon": "a small winged dragon, side view", "ghost": "a small floating ghost", "snake": "a small snake, side view",
|
|
47
|
+
"key": "a single golden key", "potion": "a single potion bottle with a cork", "scroll": "a single rolled paper scroll",
|
|
48
|
+
"bomb": "a single round black bomb with a lit fuse", "chest": "a single wooden treasure chest",
|
|
49
|
+
"arrow": "a single arrow pointing right", "tree": "a single tree", "bush": "a single round bush",
|
|
50
|
+
"rock": "a single boulder",
|
|
45
51
|
}
|
|
46
52
|
|
|
47
53
|
|