Because game_save/load does have a lot of limitations to the point that it simply gets unusable once you create anything (non-entity related) dynamically (using it only for info variables may work though). If you write your own stuff you have full control over it.
Although I'm a fan of global variables and arrays you shouldn't create and write such huge arrays in your script, always try to keep them low and reasonable.