// ChunkIndex can be a negative number
        public override void LoadChunk(int chunkIndex)
        {
            if (IsRepeatRandom)
            {
                // Jump to a random chunk, if chunk not cool
                if (chunkIndex >= ChunkFilePositions.Length || chunkIndex < 0)
                {
                    chunkIndex = GameEnvironment.Random.Next(ChunkFilePositions.Length);
                }
            }
            else
            {
                // Jump to repeat map
                if (chunkIndex >= ChunkFilePositions.Length || chunkIndex < 0)
                {
                    chunkIndex = chunkIndex % ChunkFilePositions.Length;
                }

                if (chunkIndex < 0)
                {
                    chunkIndex = (ChunkFilePositions.Length + chunkIndex);
                }
            }

            if (!ChunkTextures.ContainsKey(chunkIndex))
            {
                base.LoadChunk(chunkIndex);
            }
        }
        protected override bool EnsureChunkDrawable(ref int chunkIndex)
        {
            if (IsRepeatRandom)
            {
                // Ensure randomly loaded chunk is valid
                chunkIndex = Math.Abs(chunkIndex % (ChunkTextures.Count() - 1));
            }
            else
            {
                // Ensure wrapped chunk is valid
                if (chunkIndex >= ChunkFilePositions.Length || chunkIndex < 0)
                {
                    chunkIndex = chunkIndex % ChunkFilePositions.Length;
                }

                if (chunkIndex < 0)
                {
                    chunkIndex = (ChunkFilePositions.Length + chunkIndex);
                }
            }

            return(true); // no matter the index, draw the chunks
        }