From 7af2bb00509a296b2167b7745f8d3808f4e2a38c Mon Sep 17 00:00:00 2001 From: Quinn Date: Thu, 26 Jun 2025 11:26:22 +0200 Subject: [PATCH] fix: update roll caused SEGV, also optimised it using XOR --- src/game/tetromino/placing.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/game/tetromino/placing.c b/src/game/tetromino/placing.c index 45553f9..b796a5d 100644 --- a/src/game/tetromino/placing.c +++ b/src/game/tetromino/placing.c @@ -120,6 +120,6 @@ void place_update(struct gamedata* gdat, int movdat) { gdat->pdat.sel[0] += (tmp && shape_intersects(gdat->rows, id, gdat->pdat.sel + (i8vec2){tmp, 0})) * tmp; // update roll - tmp = id - (((!!(movdat & MOVRL) - !!(movdat & MOVRR)) * 8 + id) & 31); - gdat->pdat.nxt[idx] += (tmp && shape_intersects(gdat->rows, tmp, gdat->pdat.sel)) * tmp; + tmp = id ^ (((!!(movdat & MOVRL) - !!(movdat & MOVRR)) * 8 + id) & 31); + gdat->pdat.nxt[idx] ^= (tmp && shape_intersects(gdat->rows, id ^ tmp, gdat->pdat.sel)) * tmp; }