2911 {
2912
2913
2914 bool isCloudSave = Main.ActivePlayerFileData.IsCloudSave;
2915 string text = Main.playerPathName.Substring(0, Main.playerPathName.Length - 4);
2916 if (!isCloudSave)
2917 {
2918 Utils.TryCreatingDirectory(
text);
2919 }
2921 text = ((!Main.ActiveWorldFileData.UseGuidAsMapName) ? (
text + Main.worldID +
".map") :
string.Concat(
text, Main.ActiveWorldFileData.UniqueId,
".map"));
2923 if (!Main.gameMenu)
2924 {
2926 }
2928 {
2930 DeflateStream val =
new DeflateStream((
Stream)memoryStream, (CompressionMode)0);
2931 try
2932 {
2933 int num = 0;
2934 byte[]
array =
new byte[16384];
2935 binaryWriter.Write(279);
2936 Main.MapFileMetadata.IncrementAndWrite(binaryWriter);
2937 binaryWriter.Write(Main.worldName);
2938 binaryWriter.Write(Main.worldID);
2939 binaryWriter.Write(Main.maxTilesY);
2940 binaryWriter.Write(Main.maxTilesX);
2943 binaryWriter.Write((short)4);
2944 binaryWriter.Write((short)256);
2945 binaryWriter.Write((short)256);
2946 binaryWriter.Write((short)256);
2947 byte b = 1;
2948 byte b2 = 0;
2951 {
2953 {
2954 b2 |= b;
2955 }
2956 if (b == 128)
2957 {
2958 binaryWriter.Write(b2);
2959 b2 = 0;
2960 b = 1;
2961 }
2962 else
2963 {
2964 b <<= 1;
2965 }
2966 }
2967 if (b != 1)
2968 {
2969 binaryWriter.Write(b2);
2970 }
2972 b = 1;
2973 b2 = 0;
2975 {
2977 {
2978 b2 |= b;
2979 }
2980 if (b == 128)
2981 {
2982 binaryWriter.Write(b2);
2983 b2 = 0;
2984 b = 1;
2985 }
2986 else
2987 {
2988 b <<= 1;
2989 }
2990 }
2991 if (b != 1)
2992 {
2993 binaryWriter.Write(b2);
2994 }
2996 {
2998 {
3000 }
3001 }
3003 {
3005 {
3007 }
3008 }
3009 binaryWriter.Flush();
3010 for (int j = 0; j < Main.maxTilesY; j++)
3011 {
3013 {
3014 float num2 = (float)j / (float)Main.maxTilesY;
3015 Main.statusText = Lang.gen[66].Value + " " + (int)(num2 * 100f + 1f) + "%";
3016 }
3017 int num3;
3018 for (num3 = 0; num3 < Main.maxTilesX; num3++)
3019 {
3020 MapTile mapTile = Main.Map[num3, j];
3021 byte b4;
3022 byte b3;
3023 byte b5 = (b4 = (b3 = 0));
3024 int num4 = 0;
3025 bool flag = true;
3026 bool flag2 = true;
3027 int num5 = 0;
3028 int num6 = 0;
3029 byte b6 = 0;
3030 int num7;
3031 ushort num8;
3032 if (mapTile.Light <= 18)
3033 {
3034 flag2 = false;
3035 flag = false;
3036 num7 = 0;
3037 num8 = 0;
3038 num4 = 0;
3039 int num9 = num3 + 1;
3040 int num10 = Main.maxTilesX - num3 - 1;
3041 while (num10 > 0 && Main.Map[num9, j].Light <= 18)
3042 {
3043 num4++;
3044 num10--;
3045 num9++;
3046 }
3047 }
3048 else
3049 {
3050 b6 = mapTile.Color;
3051 num8 = mapTile.Type;
3053 {
3054 num7 = 1;
3056 }
3058 {
3059 num7 = 2;
3061 }
3063 {
3065 if (num11 == 3)
3066 {
3067 b4 = (byte)(b4 | 0x40u);
3068 num11 = 0;
3069 }
3070 num7 = 3 + num11;
3071 flag = false;
3072 }
3074 {
3075 num7 = 6;
3076 flag2 = false;
3077 flag = false;
3078 }
3080 {
3081 num7 = 7;
3083 }
3084 else
3085 {
3086 num7 = 6;
3087 flag = false;
3088 }
3089 if (mapTile.Light == byte.MaxValue)
3090 {
3091 flag2 = false;
3092 }
3093 if (flag2)
3094 {
3095 num4 = 0;
3096 int num9 = num3 + 1;
3097 int num10 = Main.maxTilesX - num3 - 1;
3098 num5 = num9;
3099 while (num10 > 0)
3100 {
3101 MapTile
other = Main.Map[num9, j];
3102 if (mapTile.EqualsWithoutLight(ref
other))
3103 {
3104 num10--;
3105 num4++;
3106 num9++;
3107 continue;
3108 }
3109 num6 = num9;
3110 break;
3111 }
3112 }
3113 else
3114 {
3115 num4 = 0;
3116 int num9 = num3 + 1;
3117 int num10 = Main.maxTilesX - num3 - 1;
3118 while (num10 > 0)
3119 {
3120 MapTile other2 = Main.Map[num9, j];
3121 if (!mapTile.Equals(ref other2))
3122 {
3123 break;
3124 }
3125 num10--;
3126 num4++;
3127 num9++;
3128 }
3129 }
3130 }
3131 if (b6 > 0)
3132 {
3133 b4 |= (byte)(b6 << 1);
3134 }
3135 if (b3 != 0)
3136 {
3137 b4 = (byte)(b4 | 1u);
3138 }
3139 if (b4 != 0)
3140 {
3141 b5 = (byte)(b5 | 1u);
3142 }
3143 b5 |= (byte)(num7 << 1);
3144 if (flag && num8 > 255)
3145 {
3146 b5 = (byte)(b5 | 0x10u);
3147 }
3148 if (flag2)
3149 {
3150 b5 = (byte)(b5 | 0x20u);
3151 }
3152 if (num4 > 0)
3153 {
3154 b5 = ((num4 <= 255) ? ((byte)(b5 | 0x40u)) : ((byte)(b5 | 0x80u)));
3155 }
3157 num++;
3158 if (b4 != 0)
3159 {
3161 num++;
3162 }
3163 if (b3 != 0)
3164 {
3166 num++;
3167 }
3168 if (flag)
3169 {
3170 array[num] = (byte)num8;
3171 num++;
3172 if (num8 > 255)
3173 {
3174 array[num] = (byte)(num8 >> 8);
3175 num++;
3176 }
3177 }
3178 if (flag2)
3179 {
3180 array[num] = mapTile.Light;
3181 num++;
3182 }
3183 if (num4 > 0)
3184 {
3185 array[num] = (byte)num4;
3186 num++;
3187 if (num4 > 255)
3188 {
3189 array[num] = (byte)(num4 >> 8);
3190 num++;
3191 }
3192 }
3193 for (int k = num5; k < num6; k++)
3194 {
3195 array[num] = Main.Map[k, j].Light;
3196 num++;
3197 }
3198 num3 += num4;
3199 if (num >= 4096)
3200 {
3202 num = 0;
3203 }
3204 }
3205 }
3206 if (num > 0)
3207 {
3209 }
3212 }
3213 finally
3214 {
3216 }
3217 }
3219 }
static readonly char DirectorySeparatorChar
static readonly ushort Count
static readonly ushort Count
static ushort rockPosition
static ushort dirtPosition
static ushort tilePosition
static ushort wallPosition
static int[] tileOptionCounts
static ushort hellPosition
static ushort skyPosition
static ushort liquidPosition
static int[] wallOptionCounts
static void WriteAllBytes(string path, byte[] data, bool cloud)