// Function from file: transit_tube_construction.dm
        public virtual void tube_flip(  )
        {
            ByTable split_text = null;

            split_text = GlobalFuncs.splittext(this.icon_state, "-");

            if (Lang13.Length(split_text[2]) < 2)
            {
                return;
            }

            if (split_text.len == 3 && split_text[3] != "Pass")
            {
                split_text.Swap(2, 3);
            }
            else if (Lang13.Length(split_text[1]) == 2 && Lang13.Length(split_text[2]) == 2)
            {
                split_text[1] = String13.SubStr(split_text[1], 1, 2) + String13.SubStr(split_text[2], 2, 3);
                split_text[2] = String13.SubStr(split_text[2], 1, 2) + (String13.SubStr(split_text[2], 2, 3) == "E" ? "W" : "E");
            }
            else if (split_text[1] == "N" || split_text[1] == "S")
            {
                split_text[2] = String13.SubStr(split_text[2], 1, 2) + (String13.SubStr(split_text[2], 2, 3) == "E" ? "W" : "E");
            }
            else
            {
                split_text[2] = (String13.SubStr(split_text[2], 1, 2) == "N" ? "S" : "N") + String13.SubStr(split_text[2], 2, 3);
            }
            this.icon_state = GlobalFuncs.jointext(split_text, "-");
            return;
        }
        // Function from file: transit_tube_construction.dm
        public virtual void tube_turn(double angle = 0)
        {
            ByTable badtubes   = null;
            ByTable split_text = null;
            int?    i          = null;
            int     curdir     = 0;
            string  newdir     = null;

            badtubes   = new ByTable(new object [] { "W-E", "W-E-Pass", "S-N", "S-N-Pass", "SW-NE", "SE-NW" });
            split_text = GlobalFuncs.splittext(this.icon_state, "-");
            i          = null;
            i          = 1;

            while ((i ?? 0) <= split_text.len)
            {
                curdir = GlobalFuncs.text2dir_extended(split_text[i]);

                if (curdir != 0)
                {
                    split_text[i] = GlobalFuncs.dir2text_short(Num13.Rotate(curdir, angle));
                }
                i++;
            }
            newdir = GlobalFuncs.jointext(split_text, "-");

            if (badtubes.Find(newdir) != 0)
            {
                split_text.Swap(1, 2);
                newdir = GlobalFuncs.jointext(split_text, "-");
            }
            this.icon_state = newdir;
            return;
        }
		// Range: -1 Access: 0 Flags: ( 0, 4, 255 )
		public static void moveRange( ByTable L = null, dynamic fromIndex = null, dynamic toIndex = null, dynamic len = null ) {
			dynamic distance = null;
			dynamic i = null;
			dynamic i2 = null;
			if ( len == null ) {
				len = 1;
			}
			distance = Math.Abs( Lang13.Double( toIndex - fromIndex ) );
			if ( Lang13.Double( len ) >= Lang13.Double( distance ) ) {
				if ( Lang13.Double( fromIndex ) <= Lang13.Double( toIndex ) ) {
					return;
				}
				fromIndex += len;
				i = null;
				i = 0;
				while (Lang13.Double( i ) < Lang13.Double( distance )) {
					L.Insert( Lang13.Int( fromIndex ), null );
					L.Swap( Lang13.Int( fromIndex ), Lang13.Int( toIndex ) );
					L.Cut( Lang13.IntNullable( toIndex ), Lang13.Int( toIndex + 1 ) );
					i++;
				}
			} else {
				if ( Lang13.Double( fromIndex ) > Lang13.Double( toIndex ) ) {
					fromIndex += len;
				}
				i2 = null;
				i2 = 0;
				while (Lang13.Double( i2 ) < Lang13.Double( len )) {
					L.Insert( Lang13.Int( toIndex ), null );
					L.Swap( Lang13.Int( fromIndex ), Lang13.Int( toIndex ) );
					L.Cut( Lang13.IntNullable( fromIndex ), Lang13.Int( fromIndex + 1 ) );
					i2++;
				}
			}
			return;
		}
		// Range: -1 Access: 0 Flags: ( 0, 4, 255 )
		public static void moveElement( ByTable L = null, dynamic fromIndex = null, dynamic toIndex = null ) {
			if ( fromIndex == toIndex || fromIndex + 1 == toIndex ) {
				return;
			}
			if ( Lang13.Double( fromIndex ) > Lang13.Double( toIndex ) ) {
				fromIndex++;
			}
			L.Insert( Lang13.Int( toIndex ), null );
			L.Swap( Lang13.Int( fromIndex ), Lang13.Int( toIndex ) );
			L.Cut( Lang13.IntNullable( fromIndex ), Lang13.Int( fromIndex + 1 ) );
			return;
		}
		// Range: -1 Access: 0 Flags: ( 0, 4, 255 )
		public static ByTable camera_sort( ByTable L = null ) {
			dynamic a = null;
			dynamic b = null;
			int? i = null;
			double? j = null;
			i = null;
			i = L.len;
			while (( i ??0) > 0) {
				j = null;
				foreach (dynamic _a in Lang13.iter_range( 1, ( i ??0) - 1 ) ) {
					j = _a;
					a = L[j];
					b = L[( j ??0) + 1];
					if ( a.c_tag_order != b.c_tag_order ) {
						if ( Lang13.Double( a.c_tag_order ) > Lang13.Double( b.c_tag_order ) ) {
							L.Swap( ((int)( j )), ((int)( ( j ??0) + 1 )) );
						}
					} else if ( String13.order( a.c_tag, b.c_tag ) < 0 ) {
						L.Swap( ((int)( j )), ((int)( ( j ??0) + 1 )) );
					}
				};
				i--;
			}
			return L;
		}
		// Range: -1 Access: 0 Flags: ( 0, 4, 255 )
		public static ByTable shuffle( ByTable L = null ) {
			int? i = null;
			if ( !( L != null ) ) {
				return null;
			}
			L = L.Copy();
			i = null;
			i = 1;
			while (( i ??0) < L.len) {
				L.Swap( i ??0, Rand13.Int( i ??0, L.len ) );
				i++;
			}
			return L;
		}
		// Range: -1 Access: 0 Flags: ( 0, 4, 255 )
		public static ByTable reverseRange( ByTable L = null, double? start = null, double? end = null ) {
			if ( start == null ) {
				start = 1;
			}
			if ( end == null ) {
				end = 0;
			}
			if ( L.len != 0 ) {
				start = ( start ??0) % L.len;
				end = ( end ??0) % ( L.len + 1 );
				if ( ( start ??0) <= 0 ) {
					start += L.len;
				}
				if ( ( end ??0) <= 0 ) {
					end += L.len + 1;
				}
				end--;
				while (( start ??0) < ( end ??0)) {
					L.Swap( ((int)( start++ )), ((int)( end-- )) );
				}
			}
			return L;
		}