ludic/assets/tiled-fixtures/beach_tileset.tsx
Orkuncakilkaya 58e1105f2d
All checks were successful
bootstrap / cfree-fixpoint (push) Successful in 21s
ci / build-and-test (push) Successful in 1m53s
commit-lint / conventional-commits (push) Successful in 3s
docs / build-and-deploy (push) Successful in 28s
feat(engine): Tiled P3 — animated tiles (deterministic frame clock) + tile objects (#71)
- Animated tiles: a tileset <animation>'s {tileid, duration} frames advance as a
  pure function of the fixed 60/s engine frame counter (the same clock SpriteAnim
  rides), so an animated GID resolves at draw to the current frame's GID with its
  flip flags preserved — deterministic, frame-identical across runs, ticks for
  free. Tiled.frame_gid(map, gid, frame) / Tiled.animated(map, gid) expose it;
  Tiled.draw_anim(map, camx, camy, frame) draws a map with animations advanced.
- Tile objects: object-layer entries with a `gid` draw the tile image (with their
  own flip flags), bottom-anchored at the object position, as placeable sprites;
  tmap_draw_full now renders object layers alongside tile layers.

Proven by library/tiled_p3.ludic (14 assertions): frame advance at authored
durations + wrap, flip flags riding an animation swap, tile-object parse + draw +
flip mirroring, and the design's named rpg/beach_tileset.tsx (33 <animation>
blocks / 131 frames). x test: 94 passed.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-01 14:58:21 +03:00

267 lines
7.1 KiB
XML

<?xml version="1.0" encoding="UTF-8"?>
<tileset version="1.8" tiledversion="1.8.2" name="beach_tileset" tilewidth="16" tileheight="16" tilecount="936" columns="36">
<image source="beach_tileset.png" width="576" height="416"/>
<tile id="37">
<animation>
<frame tileid="37" duration="250"/>
<frame tileid="46" duration="250"/>
<frame tileid="55" duration="250"/>
<frame tileid="64" duration="250"/>
</animation>
</tile>
<tile id="38">
<animation>
<frame tileid="38" duration="250"/>
<frame tileid="47" duration="250"/>
<frame tileid="56" duration="250"/>
<frame tileid="65" duration="250"/>
</animation>
</tile>
<tile id="39">
<animation>
<frame tileid="39" duration="250"/>
<frame tileid="48" duration="250"/>
<frame tileid="57" duration="250"/>
<frame tileid="66" duration="250"/>
</animation>
</tile>
<tile id="41">
<animation>
<frame tileid="41" duration="250"/>
<frame tileid="50" duration="250"/>
<frame tileid="59" duration="250"/>
<frame tileid="68" duration="250"/>
</animation>
</tile>
<tile id="42">
<animation>
<frame tileid="42" duration="250"/>
<frame tileid="51" duration="250"/>
<frame tileid="60" duration="250"/>
<frame tileid="69" duration="250"/>
</animation>
</tile>
<tile id="43">
<animation>
<frame tileid="43" duration="250"/>
<frame tileid="52" duration="250"/>
<frame tileid="61" duration="250"/>
<frame tileid="70" duration="250"/>
</animation>
</tile>
<tile id="73">
<animation>
<frame tileid="73" duration="250"/>
<frame tileid="82" duration="250"/>
<frame tileid="91" duration="250"/>
<frame tileid="100" duration="250"/>
</animation>
</tile>
<tile id="75">
<animation>
<frame tileid="75" duration="250"/>
<frame tileid="84" duration="250"/>
<frame tileid="93" duration="250"/>
<frame tileid="102" duration="250"/>
</animation>
</tile>
<tile id="76">
<animation>
<frame tileid="76" duration="250"/>
<frame tileid="85" duration="250"/>
<frame tileid="94" duration="250"/>
<frame tileid="103" duration="250"/>
</animation>
</tile>
<tile id="77">
<animation>
<frame tileid="77" duration="250"/>
<frame tileid="86" duration="250"/>
<frame tileid="95" duration="250"/>
<frame tileid="104" duration="250"/>
</animation>
</tile>
<tile id="79">
<animation>
<frame tileid="79" duration="250"/>
<frame tileid="88" duration="250"/>
<frame tileid="97" duration="250"/>
<frame tileid="106" duration="250"/>
</animation>
</tile>
<tile id="109">
<animation>
<frame tileid="109" duration="250"/>
<frame tileid="118" duration="250"/>
<frame tileid="127" duration="250"/>
<frame tileid="136" duration="250"/>
</animation>
</tile>
<tile id="110">
<animation>
<frame tileid="110" duration="250"/>
<frame tileid="119" duration="250"/>
<frame tileid="128" duration="250"/>
<frame tileid="137" duration="250"/>
</animation>
</tile>
<tile id="114">
<animation>
<frame tileid="114" duration="250"/>
<frame tileid="123" duration="250"/>
<frame tileid="132" duration="250"/>
<frame tileid="141" duration="250"/>
</animation>
</tile>
<tile id="115">
<animation>
<frame tileid="115" duration="250"/>
<frame tileid="124" duration="250"/>
<frame tileid="133" duration="250"/>
<frame tileid="142" duration="250"/>
</animation>
</tile>
<tile id="146">
<animation>
<frame tileid="146" duration="250"/>
<frame tileid="155" duration="250"/>
<frame tileid="164" duration="250"/>
<frame tileid="173" duration="250"/>
</animation>
</tile>
<tile id="148">
<animation>
<frame tileid="148" duration="250"/>
<frame tileid="157" duration="250"/>
<frame tileid="166" duration="250"/>
</animation>
</tile>
<tile id="150">
<animation>
<frame tileid="150" duration="250"/>
<frame tileid="159" duration="250"/>
<frame tileid="168" duration="250"/>
<frame tileid="177" duration="250"/>
</animation>
</tile>
<tile id="181">
<animation>
<frame tileid="181" duration="250"/>
<frame tileid="190" duration="250"/>
<frame tileid="199" duration="250"/>
<frame tileid="208" duration="250"/>
</animation>
</tile>
<tile id="182">
<animation>
<frame tileid="182" duration="250"/>
<frame tileid="191" duration="250"/>
<frame tileid="200" duration="250"/>
<frame tileid="209" duration="250"/>
</animation>
</tile>
<tile id="186">
<animation>
<frame tileid="186" duration="250"/>
<frame tileid="195" duration="250"/>
<frame tileid="204" duration="250"/>
<frame tileid="213" duration="250"/>
</animation>
</tile>
<tile id="187">
<animation>
<frame tileid="187" duration="250"/>
<frame tileid="196" duration="250"/>
<frame tileid="205" duration="250"/>
<frame tileid="214" duration="250"/>
</animation>
</tile>
<tile id="217">
<animation>
<frame tileid="217" duration="250"/>
<frame tileid="226" duration="250"/>
<frame tileid="235" duration="250"/>
<frame tileid="244" duration="250"/>
</animation>
</tile>
<tile id="219">
<animation>
<frame tileid="219" duration="250"/>
<frame tileid="228" duration="250"/>
<frame tileid="237" duration="250"/>
<frame tileid="246" duration="250"/>
</animation>
</tile>
<tile id="220">
<animation>
<frame tileid="220" duration="250"/>
<frame tileid="229" duration="250"/>
<frame tileid="238" duration="250"/>
<frame tileid="247" duration="250"/>
</animation>
</tile>
<tile id="221">
<animation>
<frame tileid="221" duration="250"/>
<frame tileid="230" duration="250"/>
<frame tileid="239" duration="250"/>
<frame tileid="248" duration="250"/>
</animation>
</tile>
<tile id="223">
<animation>
<frame tileid="223" duration="250"/>
<frame tileid="232" duration="250"/>
<frame tileid="241" duration="250"/>
<frame tileid="250" duration="250"/>
</animation>
</tile>
<tile id="253">
<animation>
<frame tileid="253" duration="250"/>
<frame tileid="262" duration="250"/>
<frame tileid="271" duration="250"/>
<frame tileid="280" duration="250"/>
</animation>
</tile>
<tile id="254">
<animation>
<frame tileid="254" duration="250"/>
<frame tileid="263" duration="250"/>
<frame tileid="272" duration="250"/>
<frame tileid="281" duration="250"/>
</animation>
</tile>
<tile id="255">
<animation>
<frame tileid="255" duration="250"/>
<frame tileid="264" duration="250"/>
<frame tileid="273" duration="250"/>
<frame tileid="282" duration="250"/>
</animation>
</tile>
<tile id="257">
<animation>
<frame tileid="257" duration="250"/>
<frame tileid="266" duration="250"/>
<frame tileid="275" duration="250"/>
<frame tileid="284" duration="250"/>
</animation>
</tile>
<tile id="258">
<animation>
<frame tileid="258" duration="250"/>
<frame tileid="267" duration="250"/>
<frame tileid="276" duration="250"/>
<frame tileid="285" duration="250"/>
</animation>
</tile>
<tile id="259">
<animation>
<frame tileid="259" duration="250"/>
<frame tileid="268" duration="250"/>
<frame tileid="277" duration="250"/>
<frame tileid="286" duration="250"/>
</animation>
</tile>
</tileset>