Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
Tags

Your line must be something like

array_name[i][k] = val

which looks innocent but is executed as

if <is not set>(array_name) || !is_array(array_name) array_name = [];
var tmp;
if (i >= array_length(array_name) || !is_array(array_name[i])) {
    tmp = [];
    array_name[@i] = tmp;
} else tmp = array_name[i];
tmp[@k] = val;

Changing it to array_name[@i][@k] = val; would fix it. Using legacy [i, k] syntax might also work since I had that hard-coded as an exception from usual rules before.

I intend to rewrite how GMLive handles this but it’s a moderate amount of work since you can similarly do map[?key][ind] = val, list[|i][k] = val, and so on, and it will store the freshly made array in the data structure in each case.