Bullet sprites were wrong because I read the pack's layout backwards. Each of
its 8 PNGs is one ANIMATION FRAME, and a column within a file is a COLOUR
variant -- so walking columns cycled the palette while the shape sat still, and
the rows I picked were in a region of larger multi-cell sprites, which is the
scattered debris that showed on screen. tools/build_local_assets.py now composes
a proper atlas: 8 frames across, one row per SimConfig.KIND_*.
Animations ran at whatever the machine's framerate was, because they counted
_process calls. At 240fps that is four times too fast on its own, before the
requested halving. Both actor and bullet animation are now driven by elapsed
seconds, so they look the same on any machine.
The knight shifted sideways instead of mirroring: a Rect2 with negative width
does not flip, the draw call normalises it, so the sprite kept its orientation
and jumped right by its own width. Mirrored through the canvas transform about
the sprite's centre instead.
Shots were silent when a bullet spawned inside an enemy. The sound rode on
BULLET_SPAWN, which is deliberately suppressed for a bullet resolved and removed
within the same tick -- so no event, no sound, and this got more likely the
closer you stood. Firing is now its own event (PLAYER_FIRED): the shot happened
whether or not a bullet survived to be replicated. Protocol 3 -> 4, because
inserting mid-enum shifts the wire value of every event after it.
Fire cooldown 7 -> 14 ticks (4.3 shots/sec).
Licence question 2, confirmed verbatim: the paid tier DOES grant commercial use
("You may use these assets in personal, commercial or non-commercial
projects"), but its next sentence still forbids redistribution "no matter how
much you modify it". Paying moves these from local-only-and-non-commercial to
local-only-and-commercial; it never makes them committable. Only replacing them
with permissively licensed art does that.
Question 3: CREDITS.md now credits every pack, including the two whose licences
do not require it and the unused ones in considering_dont_use_yet/.
158 tests. check.sh, test.sh and smoke.sh pass.
2.2 KiB
Credits
Every third-party asset pack used or bundled during development, credited regardless of whether its licence requires it. Two of them do not — they are here because the work deserves it.
In the game
16x16 DungeonTileset II — 0x72 (Robert Norenberg) Terrain, player, enemies and boss sprites. CC0 1.0 — public domain. Credit not required.
Pixel Combat SFX — Helton Yan All sound effects. Converted to 16-bit / 44.1 kHz mono and trimmed. CC BY 4.0. Credit required by licence.
Fire Pixel Bullet 16x16 — bdragon1727 Bullet sprites. Custom licence; credit encouraged, not required. Not distributed with this repository — see below.
750+ Effect and FX Pixel All — bdragon1727 Impact effect artwork. Custom licence; credit encouraged, not required. Not distributed with this repository — see below.
Present during development, not used in the game
Kept in the untracked assetpacks/considering_dont_use_yet/ and referenced by
nothing. Credited for completeness.
RF Catacombs v1.0 — Szadi art. Public domain per the pack's bundled
public-license.txt: free for personal or commercial use, credit appreciated
but not required, no reselling of the pack itself.
Tiny RPG Character Asset Pack 02 and neo_zero (v1.0 and 3.0 demo) — creators not recorded in the packs themselves. If either is ever used, record the source and terms here first.
Why two packs are not in this repository
Both bdragon1727 packs forbid redistribution, in every tier:
Free tier: "You cannot do: Resell / redistribute this asset."
Paid tier: "You can NOT re-distribute the file, no matter how much you modify it you can use it but not share or re-sell it."
A public repository distributes what it contains, so those files live in the
untracked assets/local/. The game falls back to generated placeholders
without them. See docs/ASSETS.md.