The documentation describes how
c[1,1] is handled in v1.
https://www.autohotkey.com/docs/Objects.htm#Usage_Arrays_of_Arrays
It should be reasonably trivial to implement similar behaviour by (re)defining
__Item. You may use Array or Map as a base, but it is not a requirement; any object can be used like
c[1,1] if it defines an __Item property which accepts two (or a varying number of) parameters.
When
c[1,1] := value (which is equivalent to
c.__Item[1,1] := value) is evaluated, __Item would assign
super[1] a new map/array/object if not already set (where
super is used literally to refer to the base-class version of __Item, or is replaced with a reference to an internal array/map/object), and then assign
super[1][1] := value.
If you use a plain Array directly, you just have to assign another Array to
c[1] before assigning
c[1][1]. (Perhaps avoid thinking of it is a
multidimensional array; it is an array of arrays.)