Remove non-redistributable art from the repo; record licence terms
ci / verify (push) Successful in 46s

Researched the licence at each of the four itch.io sources. Two of the four
forbid redistribution, and publishing a repository containing them is exactly
that, so they are out of the tree.

  0x72 DungeonTileset II    CC0 1.0    commercial ok, no credit required
  Helton Yan Pixel Combat   CC BY 4.0  commercial ok, CREDIT REQUIRED
  Fire Pixel Bullet 16x16   custom     non-commercial, NO REDISTRIBUTION
  750+ Effect and FX Pixel  custom     non-commercial, NO REDISTRIBUTION

Both bdragon1727 packs state verbatim: "You cannot do: Resell / redistribute
this asset." The FX pack's paid tier is no better for this purpose -- "You can
NOT re-distribute the file, no matter how much you modify it" -- so paying does
not unlock it and neither does editing the art.

bullets.png and impact.png therefore move to assets/local/, gitignored.
Art.bullets_texture() / impact_texture() load them at runtime and return null
when absent; the bullet renderer falls back to the generated dot it used before,
tinted per kind so bullet types stay distinguishable. Nothing there may be
preload()ed -- preload resolves at compile time and would fail the build on
every machine without the files, which is every clone.

Verified both ways rather than assumed: with the files present the game uses
them and no fallback triggers; with them moved aside, 156/156 tests pass and the
game runs clean on the generated dots.

Added CREDITS.md, because Helton Yan's CC BY 4.0 makes attribution a licence
obligation rather than a courtesy. A file in the source tree does not discharge
it once the game ships -- an in-game credits screen is now a tracked todo, and
flagged as a licence requirement rather than polish.

NOT addressed here, and it needs a decision: these files remain in git history
at 4a41ccb. Removing them from the tip does not remove them from a clone. If
this repo is ever made public, history has to be rewritten (git filter-repo)
and force-pushed. Also, both bdragon packs are non-commercial in their free
tier, which conflicts with the stated Steam goal -- either contribute for the
commercial tier (still no redistribution) or replace with CC0 art, which would
solve both problems and let the assets back into the repo.
This commit is contained in:
2026-09-03 23:52:41 +02:00
parent 4a41ccb600
commit 33845a8a42
13 changed files with 216 additions and 113 deletions
+24 -6
View File
@@ -12,10 +12,20 @@ func _fits(tex: Texture2D, r: Rect2) -> bool:
and r.end.x <= size.x and r.end.y <= size.y
func test_every_texture_loaded() -> void:
for tex in [Art.TILESET, Art.BULLETS, Art.IMPACT]:
assert_not_null(tex)
assert_gt(tex.get_width(), 0)
func test_the_committed_texture_loads() -> void:
assert_not_null(Art.TILESET)
assert_gt(Art.TILESET.get_width(), 0)
## The licence-restricted sheets are absent from a clean clone by design, so
## their absence must be a supported state rather than a failure. When they are
## present locally, the rect tests below still validate them.
func test_the_game_runs_without_the_restricted_art() -> void:
var bullets := Art.bullets_texture()
if bullets == null:
assert_true(true, "no bullet sheet: renderer falls back to generated dots")
else:
assert_gt(bullets.get_width(), 0)
func test_terrain_rects_are_inside_the_tileset() -> void:
@@ -38,13 +48,17 @@ func test_every_animation_frame_is_inside_the_tileset() -> void:
func test_every_bullet_frame_is_inside_the_sheet() -> void:
var sheet := Art.bullets_texture()
if sheet == null:
pass_test("bullet sheet not present locally; nothing to validate")
return
for kind in Art.BULLET_CELLS.size():
var cell: Vector2i = Art.BULLET_CELLS[kind]
for n in Art.BULLET_FRAMES:
var r := Rect2(
Vector2(float(cell.x + n), float(cell.y)) * Art.BULLET_CELL,
Vector2(Art.BULLET_CELL, Art.BULLET_CELL))
assert_true(_fits(Art.BULLETS, r),
assert_true(_fits(sheet, r),
"bullet kind %d frame %d is outside the sheet at %s" % [kind, n, r])
@@ -63,10 +77,14 @@ func test_there_is_a_sprite_for_every_enemy_visual() -> void:
func test_impact_sheet_covers_its_declared_frames() -> void:
var impact := Art.impact_texture()
if impact == null:
pass_test("impact sheet not present locally; nothing to validate")
return
var last := Rect2(
Vector2(float((Art.IMPACT_FRAMES - 1) % Art.IMPACT_COLUMNS), 0.0) * Art.IMPACT_CELL,
Vector2(Art.IMPACT_CELL, Art.IMPACT_CELL))
assert_true(_fits(Art.IMPACT, last))
assert_true(_fits(impact, last))
func test_every_sound_loaded_and_is_short_enough_to_be_a_sound_effect() -> void: