Quick answer: Construct 3 tile-by-tile collision events firing inconsistently? Solid behavior occupies the picking - convert tiles to instance variables or use Collision On Tile expression.

Player walks on damage tiles. Some tiles trigger, others don't. Solid is on; collision shape matches the tile.

Use Tilemap.At expression

Check Tilemap.At(Player.X, Player.Y) per tick. Direct tile-ID lookup avoids the Solid picking quirk.

Or convert to instance objects

Special-behavior tiles become separate object instances (DamageTile, IceTile). Collision events on instances are more reliable than per-tile.

Profile in the debug

Construct 3 debugger shows picked objects per event. If your tile picking is empty when expected, the Solid layer is the cause.

“Tilemaps optimize for static. Per-tile gameplay benefits from instances.”

Use tilemaps for visuals and large solid masses. Use instances for anything that triggers gameplay events. The mixed approach is easier than fighting one tool to do both.