- 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>
267 lines
7.1 KiB
XML
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>
|