Heightmap & Splatmaps des Terrains

    Unser Forum verwendet Cookies. Durch die Nutzung unserer Seite erklärst du dich damit einverstanden, dass wir Cookies setzen. Datenschutzerklärung.


    Entscheidet mit wie es mit dem Forum in Zukunft weitergehen soll -> Status & Umfrage

      Heightmap & Splatmaps des Terrains

      Es ist endlich soweit. Ich habe die Terrain Heightmap aus dem Spiel exportiert bekommen. ^^

      Ich möchte sie gerne mit anderen Moddern teilen. Vllt bringt sie ja irgendwem etwas. Ich werde auf Basis dessen den Map Editor bauen.
      Die Splat Maps werde ich demnächst auch noch exportieren.

      (Für Laien: Weiß = Hoch, Schwarz = Tief)


      Und hier die 8 Splatmaps (Für Laien: Weiß = Viel Textur, Schwarz = Wenig Textur):









      Und abschließend noch das Archiv, in dem sich auch die RAW Dateien (mit Windows Byte Order, 16 Bit) befinden:
      souldrinker.de/The Forest Map.zip

      Folgende Infos habe ich auch noch extrahiert:
      Position: -1750;0;-1742.631
      Scale: 1;1;1
      HeightMap-Resolution: 2049
      HeightMap-Scale: (1.7, 250.0, 1.7)
      Splat0-Offset:0.3333333,0.3333333
      Splat0-Size:1,0.3333333
      Splat1-Offset:0.3333333,0.3333333
      Splat1-Size:1,0.3333333
      Splat2-Offset:0.3333333,0.3333333
      Splat2-Size:1,0.3333333
      Splat3-Offset:0.3333333,0.3333333
      Splat3-Size:1,0.3333333
      Splat4-Offset:0.3333333,0.3333333
      Splat4-Size:1,0.3333333
      Splat5-Offset:0.3333333,0.3333333
      Splat5-Size:1,0.3333333
      Splat6-Offset:0.3333333,0.3333333
      Splat6-Size:1,0.3333333
      Splat7-Offset:0.3333333,0.3333333
      Splat7-Size:1,0.3333333
      Pixel Error: 68.8
      BaseMap-Resolution: 1024
      BMap-Resolution: 1024

      Ich bin nur dank ILDASM und ILASM an die Heightmap gekommen, da der Code dafür sehr viele Instructions beinhaltet.
      Habe quasi einfach irgendeine Methode genommen (in diesem Fall "GehSchlafen") und habe dann alle Terrains, die geladen sind, ausgelesen, umgewandelt und abgespeichert.

      So, jetzt kann ich in Ruhe schlafen gehen ^^

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Souldrinker“ ()

      Na das gefällt mir doch sehr gut :) Was ich persönlich damit anfangen kann, weiss ich (noch) nicht, aber es ist doch mal ein großer Schritt in die richtige Richtung für Modder und alles was weiter auf uns zukommen wird :D

      In einen Spoiler-Tag würde ich es noch packen da das Bild ja wirklich riesengroß ist :)
      Von mir verfasste Beiträge befinden sich unter der Creative Commons Lizenz 3.0
      •[ Profil im The Forest Forum & Profil im Stranded Deep Forum ]•
      Okay...gute..Arbeit?
      Ich hoffe ich bin nicht der einzige der mit jeden deiner Wörter gar nichts anfangen kann :D
      Ich sehe da vor mir nur ein schwarz weißes Bild.

      Kannst Du einmal für mich (und hoffentlich den ein oder anderen der sich ebenfalls 0 auskennt) erklären was genau uns das nun bringt :)
      Lust auf ein wenig THE FOREST?
      Schaut euch doch auf meinen Kanal um, wenn Ihr Interesse habt! :)
      YT: www.youtube.com/user/ProfessorGastLPfacebook.com/ProfessorGast?ref=hl[/url]

      Neues Forum, #1 deutsches Miscreated Forum! Seid noch VOR dem Start ein Teil davon: miscreated-forum.de
      Ich kann in meinen Savegame Editor nun das Terrain der Insel darstellen und ebenfalls die Objekte auf diesem Terrain platzieren.
      Also wird es in Version 0.04 oder 0.05 des Map Editors ein What you see is what you get Editor geben. ;)

      Zwar wird das Terrain grafisch anders aussehen, aber von der Form genauso sein, wie es das im Spiel ist. So kann man schön über die Insel fliegen und sich alles mögliche zusammen zimmern oder eben auch löschen.
      @ProfessorGast -> Die Heightmap ist im Prinzip eine einfache und speicher-, wie auch resourcenarme Methode um mittels Farbunterschieden (weiß = hoch, schwarz = tief) definieren zu können damit das Spiel weiß was auf der Karte hoch und niedrig ist. Die Ansicht ist dabei von oben. Könnte auch beim Mapping helfen, das ja oft von der "Oben-Ansicht" aus passiert. Ich hoffe das hilft dir etwas weiter - wenn nicht, bitte dazu fragen :)

      Update: Also doch nicht schon im Bett @Souldrinker :D
      Von mir verfasste Beiträge befinden sich unter der Creative Commons Lizenz 3.0
      •[ Profil im The Forest Forum & Profil im Stranded Deep Forum ]•

      KiiZuuRaa schrieb:

      @Souldrinker
      Gar nicht mal schlecht, hat etwas von einer militärischen Aufklärungskarte (wem das Fachsimile dazu einfällt kriegt'n Bienchen ^^ ). Da du so ausgelaugt wirktest --> wie lang hast du dafür gebraucht? Und mit welchem Prog konntest du das exportieren? Gimme Hintergrundwissen pls 8o


      Steht im Hauptbeitrag.

      Ich habe die Assembly-CSharp.dll zu IL Code Disassembled. Dann habe ich den IL Code einer Methode (in diesem Fall TheForestAtmosphere::TimeLapse) überschrieben mit IL Code, der alle Terrains ausliest.

      Der IL Code sieht folgendermaßen aus:
      Spoiler anzeigen

      Quellcode

      1. .method private hidebysig instance void Extract() cil managed
      2. {
      3. // Code size 775 (0x307)
      4. .maxstack 100
      5. .locals init (class [UnityEngine]UnityEngine.Terrain[] V_0,
      6. int32 V_1,
      7. string V_2,
      8. string V_3,
      9. int32 V_4,
      10. int32 V_5,
      11. class [UnityEngine]UnityEngine.Texture2D V_6,
      12. float32[,] V_7,
      13. int32 V_8,
      14. int32 V_9,
      15. uint8[] V_10,
      16. string V_11,
      17. valuetype [UnityEngine]UnityEngine.Vector3 V_12,
      18. valuetype [UnityEngine]UnityEngine.Vector3 V_13,
      19. valuetype [UnityEngine]UnityEngine.Vector3 V_14,
      20. valuetype [UnityEngine]UnityEngine.Vector3 V_15,
      21. valuetype [UnityEngine]UnityEngine.Vector3 V_16,
      22. valuetype [UnityEngine]UnityEngine.Vector3 V_17)
      23. IL_0000: call !!0[] [UnityEngine]UnityEngine.Object::FindObjectsOfType<class [UnityEngine]UnityEngine.Terrain>()
      24. IL_0005: stloc.0
      25. IL_0006: ldc.i4.0
      26. IL_0007: stloc.1
      27. IL_0008: br IL_02fd
      28. IL_000d: ldsfld string [mscorlib]System.String::Empty
      29. IL_0012: stloc.2
      30. IL_0013: ldloc.2
      31. IL_0014: stloc.s V_11
      32. IL_0016: ldc.i4.8
      33. IL_0017: newarr [mscorlib]System.Object
      34. IL_001c: dup
      35. IL_001d: ldc.i4.0
      36. IL_001e: ldloc.s V_11
      37. IL_0020: stelem.ref
      38. IL_0021: dup
      39. IL_0022: ldc.i4.1
      40. IL_0023: ldstr "Position: "
      41. IL_0028: stelem.ref
      42. IL_0029: dup
      43. IL_002a: ldc.i4.2
      44. IL_002b: ldloc.0
      45. IL_002c: ldloc.1
      46. IL_002d: ldelem.ref
      47. IL_002e: callvirt instance class [UnityEngine]UnityEngine.GameObject [UnityEngine]UnityEngine.Component::get_gameObject()
      48. IL_0033: callvirt instance class [UnityEngine]UnityEngine.Transform [UnityEngine]UnityEngine.GameObject::get_transform()
      49. IL_0038: callvirt instance valuetype [UnityEngine]UnityEngine.Vector3 [UnityEngine]UnityEngine.Transform::get_position()
      50. IL_003d: stloc.s V_12
      51. IL_003f: ldloca.s V_12
      52. IL_0041: ldfld float32 [UnityEngine]UnityEngine.Vector3::x
      53. IL_0046: box [mscorlib]System.Single
      54. IL_004b: stelem.ref
      55. IL_004c: dup
      56. IL_004d: ldc.i4.3
      57. IL_004e: ldstr ";"
      58. IL_0053: stelem.ref
      59. IL_0054: dup
      60. IL_0055: ldc.i4.4
      61. IL_0056: ldloc.0
      62. IL_0057: ldloc.1
      63. IL_0058: ldelem.ref
      64. IL_0059: callvirt instance class [UnityEngine]UnityEngine.GameObject [UnityEngine]UnityEngine.Component::get_gameObject()
      65. IL_005e: callvirt instance class [UnityEngine]UnityEngine.Transform [UnityEngine]UnityEngine.GameObject::get_transform()
      66. IL_0063: callvirt instance valuetype [UnityEngine]UnityEngine.Vector3 [UnityEngine]UnityEngine.Transform::get_position()
      67. IL_0068: stloc.s V_13
      68. IL_006a: ldloca.s V_13
      69. IL_006c: ldfld float32 [UnityEngine]UnityEngine.Vector3::y
      70. IL_0071: box [mscorlib]System.Single
      71. IL_0076: stelem.ref
      72. IL_0077: dup
      73. IL_0078: ldc.i4.5
      74. IL_0079: ldstr ";"
      75. IL_007e: stelem.ref
      76. IL_007f: dup
      77. IL_0080: ldc.i4.6
      78. IL_0081: ldloc.0
      79. IL_0082: ldloc.1
      80. IL_0083: ldelem.ref
      81. IL_0084: callvirt instance class [UnityEngine]UnityEngine.GameObject [UnityEngine]UnityEngine.Component::get_gameObject()
      82. IL_0089: callvirt instance class [UnityEngine]UnityEngine.Transform [UnityEngine]UnityEngine.GameObject::get_transform()
      83. IL_008e: callvirt instance valuetype [UnityEngine]UnityEngine.Vector3 [UnityEngine]UnityEngine.Transform::get_position()
      84. IL_0093: stloc.s V_14
      85. IL_0095: ldloca.s V_14
      86. IL_0097: ldfld float32 [UnityEngine]UnityEngine.Vector3::z
      87. IL_009c: box [mscorlib]System.Single
      88. IL_00a1: stelem.ref
      89. IL_00a2: dup
      90. IL_00a3: ldc.i4.7
      91. IL_00a4: ldstr "\r\n"
      92. IL_00a9: stelem.ref
      93. IL_00aa: call string [mscorlib]System.String::Concat(object[])
      94. IL_00af: stloc.2
      95. IL_00b0: ldloc.2
      96. IL_00b1: stloc.s V_11
      97. IL_00b3: ldc.i4.8
      98. IL_00b4: newarr [mscorlib]System.Object
      99. IL_00b9: dup
      100. IL_00ba: ldc.i4.0
      101. IL_00bb: ldloc.s V_11
      102. IL_00bd: stelem.ref
      103. IL_00be: dup
      104. IL_00bf: ldc.i4.1
      105. IL_00c0: ldstr "Scale: "
      106. IL_00c5: stelem.ref
      107. IL_00c6: dup
      108. IL_00c7: ldc.i4.2
      109. IL_00c8: ldloc.0
      110. IL_00c9: ldloc.1
      111. IL_00ca: ldelem.ref
      112. IL_00cb: callvirt instance class [UnityEngine]UnityEngine.GameObject [UnityEngine]UnityEngine.Component::get_gameObject()
      113. IL_00d0: callvirt instance class [UnityEngine]UnityEngine.Transform [UnityEngine]UnityEngine.GameObject::get_transform()
      114. IL_00d5: callvirt instance valuetype [UnityEngine]UnityEngine.Vector3 [UnityEngine]UnityEngine.Transform::get_localScale()
      115. IL_00da: stloc.s V_15
      116. IL_00dc: ldloca.s V_15
      117. IL_00de: ldfld float32 [UnityEngine]UnityEngine.Vector3::x
      118. IL_00e3: box [mscorlib]System.Single
      119. IL_00e8: stelem.ref
      120. IL_00e9: dup
      121. IL_00ea: ldc.i4.3
      122. IL_00eb: ldstr ";"
      123. IL_00f0: stelem.ref
      124. IL_00f1: dup
      125. IL_00f2: ldc.i4.4
      126. IL_00f3: ldloc.0
      127. IL_00f4: ldloc.1
      128. IL_00f5: ldelem.ref
      129. IL_00f6: callvirt instance class [UnityEngine]UnityEngine.GameObject [UnityEngine]UnityEngine.Component::get_gameObject()
      130. IL_00fb: callvirt instance class [UnityEngine]UnityEngine.Transform [UnityEngine]UnityEngine.GameObject::get_transform()
      131. IL_0100: callvirt instance valuetype [UnityEngine]UnityEngine.Vector3 [UnityEngine]UnityEngine.Transform::get_localScale()
      132. IL_0105: stloc.s V_16
      133. IL_0107: ldloca.s V_16
      134. IL_0109: ldfld float32 [UnityEngine]UnityEngine.Vector3::y
      135. IL_010e: box [mscorlib]System.Single
      136. IL_0113: stelem.ref
      137. IL_0114: dup
      138. IL_0115: ldc.i4.5
      139. IL_0116: ldstr ";"
      140. IL_011b: stelem.ref
      141. IL_011c: dup
      142. IL_011d: ldc.i4.6
      143. IL_011e: ldloc.0
      144. IL_011f: ldloc.1
      145. IL_0120: ldelem.ref
      146. IL_0121: callvirt instance class [UnityEngine]UnityEngine.GameObject [UnityEngine]UnityEngine.Component::get_gameObject()
      147. IL_0126: callvirt instance class [UnityEngine]UnityEngine.Transform [UnityEngine]UnityEngine.GameObject::get_transform()
      148. IL_012b: callvirt instance valuetype [UnityEngine]UnityEngine.Vector3 [UnityEngine]UnityEngine.Transform::get_localScale()
      149. IL_0130: stloc.s V_17
      150. IL_0132: ldloca.s V_17
      151. IL_0134: ldfld float32 [UnityEngine]UnityEngine.Vector3::z
      152. IL_0139: box [mscorlib]System.Single
      153. IL_013e: stelem.ref
      154. IL_013f: dup
      155. IL_0140: ldc.i4.7
      156. IL_0141: ldstr "\r\n"
      157. IL_0146: stelem.ref
      158. IL_0147: call string [mscorlib]System.String::Concat(object[])
      159. IL_014c: stloc.2
      160. IL_014d: ldloc.2
      161. IL_014e: stloc.s V_11
      162. IL_0150: ldc.i4.4
      163. IL_0151: newarr [mscorlib]System.Object
      164. IL_0156: dup
      165. IL_0157: ldc.i4.0
      166. IL_0158: ldloc.s V_11
      167. IL_015a: stelem.ref
      168. IL_015b: dup
      169. IL_015c: ldc.i4.1
      170. IL_015d: ldstr "HMap-Resolution: "
      171. IL_0162: stelem.ref
      172. IL_0163: dup
      173. IL_0164: ldc.i4.2
      174. IL_0165: ldloc.0
      175. IL_0166: ldloc.1
      176. IL_0167: ldelem.ref
      177. IL_0168: callvirt instance class [UnityEngine]UnityEngine.TerrainData [UnityEngine]UnityEngine.Terrain::get_terrainData()
      178. IL_016d: callvirt instance int32 [UnityEngine]UnityEngine.TerrainData::get_heightmapResolution()
      179. IL_0172: box [mscorlib]System.Int32
      180. IL_0177: stelem.ref
      181. IL_0178: dup
      182. IL_0179: ldc.i4.3
      183. IL_017a: ldstr "\r\n"
      184. IL_017f: stelem.ref
      185. IL_0180: call string [mscorlib]System.String::Concat(object[])
      186. IL_0185: stloc.2
      187. IL_0186: ldloc.2
      188. IL_0187: stloc.s V_11
      189. IL_0189: ldc.i4.4
      190. IL_018a: newarr [mscorlib]System.Object
      191. IL_018f: dup
      192. IL_0190: ldc.i4.0
      193. IL_0191: ldloc.s V_11
      194. IL_0193: stelem.ref
      195. IL_0194: dup
      196. IL_0195: ldc.i4.1
      197. IL_0196: ldstr "HMap-Scale: "
      198. IL_019b: stelem.ref
      199. IL_019c: dup
      200. IL_019d: ldc.i4.2
      201. IL_019e: ldloc.0
      202. IL_019f: ldloc.1
      203. IL_01a0: ldelem.ref
      204. IL_01a1: callvirt instance class [UnityEngine]UnityEngine.TerrainData [UnityEngine]UnityEngine.Terrain::get_terrainData()
      205. IL_01a6: callvirt instance valuetype [UnityEngine]UnityEngine.Vector3 [UnityEngine]UnityEngine.TerrainData::get_heightmapScale()
      206. IL_01ab: box [UnityEngine]UnityEngine.Vector3
      207. IL_01b0: stelem.ref
      208. IL_01b1: dup
      209. IL_01b2: ldc.i4.3
      210. IL_01b3: ldstr "\r\n"
      211. IL_01b8: stelem.ref
      212. IL_01b9: call string [mscorlib]System.String::Concat(object[])
      213. IL_01be: stloc.2
      214. IL_01bf: ldloc.2
      215. IL_01c0: stloc.s V_11
      216. IL_01c2: ldc.i4.4
      217. IL_01c3: newarr [mscorlib]System.Object
      218. IL_01c8: dup
      219. IL_01c9: ldc.i4.0
      220. IL_01ca: ldloc.s V_11
      221. IL_01cc: stelem.ref
      222. IL_01cd: dup
      223. IL_01ce: ldc.i4.1
      224. IL_01cf: ldstr "BMap-Resolution: "
      225. IL_01d4: stelem.ref
      226. IL_01d5: dup
      227. IL_01d6: ldc.i4.2
      228. IL_01d7: ldloc.0
      229. IL_01d8: ldloc.1
      230. IL_01d9: ldelem.ref
      231. IL_01da: callvirt instance class [UnityEngine]UnityEngine.TerrainData [UnityEngine]UnityEngine.Terrain::get_terrainData()
      232. IL_01df: callvirt instance int32 [UnityEngine]UnityEngine.TerrainData::get_baseMapResolution()
      233. IL_01e4: box [mscorlib]System.Int32
      234. IL_01e9: stelem.ref
      235. IL_01ea: dup
      236. IL_01eb: ldc.i4.3
      237. IL_01ec: ldstr "\r\n"
      238. IL_01f1: stelem.ref
      239. IL_01f2: call string [mscorlib]System.String::Concat(object[])
      240. IL_01f7: stloc.2
      241. IL_01f8: ldloc.0
      242. IL_01f9: ldloc.1
      243. IL_01fa: ldelem.ref
      244. IL_01fb: callvirt instance class [UnityEngine]UnityEngine.GameObject [UnityEngine]UnityEngine.Component::get_gameObject()
      245. IL_0200: callvirt instance string [UnityEngine]UnityEngine.Object::get_name()
      246. IL_0205: ldstr "-"
      247. IL_020a: ldloc.1
      248. IL_020b: box [mscorlib]System.Int32
      249. IL_0210: call string [mscorlib]System.String::Concat(object,
      250. object,
      251. object)
      252. IL_0215: stloc.3
      253. IL_0216: ldloc.0
      254. IL_0217: ldloc.1
      255. IL_0218: ldelem.ref
      256. IL_0219: callvirt instance class [UnityEngine]UnityEngine.TerrainData [UnityEngine]UnityEngine.Terrain::get_terrainData()
      257. IL_021e: callvirt instance int32 [UnityEngine]UnityEngine.TerrainData::get_heightmapWidth()
      258. IL_0223: stloc.s V_4
      259. IL_0225: ldloc.0
      260. IL_0226: ldloc.1
      261. IL_0227: ldelem.ref
      262. IL_0228: callvirt instance class [UnityEngine]UnityEngine.TerrainData [UnityEngine]UnityEngine.Terrain::get_terrainData()
      263. IL_022d: callvirt instance int32 [UnityEngine]UnityEngine.TerrainData::get_heightmapHeight()
      264. IL_0232: stloc.s V_5
      265. IL_0234: ldloc.s V_4
      266. IL_0236: ldloc.s V_5
      267. IL_0238: ldc.i4.3
      268. IL_0239: ldc.i4.0
      269. IL_023a: newobj instance void [UnityEngine]UnityEngine.Texture2D::.ctor(int32,
      270. int32,
      271. valuetype [UnityEngine]UnityEngine.TextureFormat,
      272. bool)
      273. IL_023f: stloc.s V_6
      274. IL_0241: ldloc.0
      275. IL_0242: ldloc.1
      276. IL_0243: ldelem.ref
      277. IL_0244: callvirt instance class [UnityEngine]UnityEngine.TerrainData [UnityEngine]UnityEngine.Terrain::get_terrainData()
      278. IL_0249: ldc.i4.0
      279. IL_024a: ldc.i4.0
      280. IL_024b: ldloc.s V_4
      281. IL_024d: ldloc.s V_5
      282. IL_024f: callvirt instance float32[,] [UnityEngine]UnityEngine.TerrainData::GetHeights(int32,
      283. int32,
      284. int32,
      285. int32)
      286. IL_0254: stloc.s V_7
      287. IL_0256: ldc.i4.0
      288. IL_0257: stloc.s V_8
      289. IL_0259: br IL_02b7
      290. IL_025e: ldc.i4.0
      291. IL_025f: stloc.s V_9
      292. IL_0261: br IL_02a2
      293. IL_0266: ldloc.s V_6
      294. IL_0268: ldloc.s V_8
      295. IL_026a: ldloc.s V_9
      296. IL_026c: ldloc.s V_7
      297. IL_026e: ldloc.s V_8
      298. IL_0270: ldloc.s V_9
      299. IL_0272: call instance float32 float32[,]::Get(int32,
      300. int32)
      301. IL_0277: ldloc.s V_7
      302. IL_0279: ldloc.s V_8
      303. IL_027b: ldloc.s V_9
      304. IL_027d: call instance float32 float32[,]::Get(int32,
      305. int32)
      306. IL_0282: ldloc.s V_7
      307. IL_0284: ldloc.s V_8
      308. IL_0286: ldloc.s V_9
      309. IL_0288: call instance float32 float32[,]::Get(int32,
      310. int32)
      311. IL_028d: ldc.r4 1.
      312. IL_0292: newobj instance void [UnityEngine]UnityEngine.Color::.ctor(float32,
      313. float32,
      314. float32,
      315. float32)
      316. IL_0297: callvirt instance void [UnityEngine]UnityEngine.Texture2D::SetPixel(int32,
      317. int32,
      318. valuetype [UnityEngine]UnityEngine.Color)
      319. IL_029c: ldloc.s V_9
      320. IL_029e: ldc.i4.1
      321. IL_029f: add
      322. IL_02a0: stloc.s V_9
      323. IL_02a2: ldloc.s V_9
      324. IL_02a4: ldloc.s V_7
      325. IL_02a6: ldc.i4.1
      326. IL_02a7: callvirt instance int32 [mscorlib]System.Array::GetLength(int32)
      327. IL_02ac: blt IL_0266
      328. IL_02b1: ldloc.s V_8
      329. IL_02b3: ldc.i4.1
      330. IL_02b4: add
      331. IL_02b5: stloc.s V_8
      332. IL_02b7: ldloc.s V_8
      333. IL_02b9: ldloc.s V_7
      334. IL_02bb: ldc.i4.0
      335. IL_02bc: callvirt instance int32 [mscorlib]System.Array::GetLength(int32)
      336. IL_02c1: blt IL_025e
      337. IL_02c6: ldloc.s V_6
      338. IL_02c8: callvirt instance void [UnityEngine]UnityEngine.Texture2D::Apply()
      339. IL_02cd: ldloc.s V_6
      340. IL_02cf: callvirt instance uint8[] [UnityEngine]UnityEngine.Texture2D::EncodeToPNG()
      341. IL_02d4: stloc.s V_10
      342. IL_02d6: ldloc.3
      343. IL_02d7: ldstr ".desc"
      344. IL_02dc: call string [mscorlib]System.String::Concat(string,
      345. string)
      346. IL_02e1: ldloc.2
      347. IL_02e2: call void [mscorlib]System.IO.File::WriteAllText(string,
      348. string)
      349. IL_02e7: ldloc.3
      350. IL_02e8: ldstr ".png"
      351. IL_02ed: call string [mscorlib]System.String::Concat(string,
      352. string)
      353. IL_02f2: ldloc.s V_10
      354. IL_02f4: call void [mscorlib]System.IO.File::WriteAllBytes(string,
      355. uint8[])
      356. IL_02f9: ldloc.1
      357. IL_02fa: ldc.i4.1
      358. IL_02fb: add
      359. IL_02fc: stloc.1
      360. IL_02fd: ldloc.1
      361. IL_02fe: ldloc.0
      362. IL_02ff: ldlen
      363. IL_0300: conv.i4
      364. IL_0301: blt IL_000d
      365. IL_0306: ret
      366. } // end of method TerrainExtractor::Extract