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.