<NME> WhatTheHellIsSCD_ARK.cs
<BEF> ﻿using UnityEngine;
using System.Collections;
using System.Text;
using System.IO;

//SCD.ark in uw2 does things. I don't know what they are yet. 

public class WhatTheHellIsSCD_ARK : UWEBase {
		public bool TableView=true;
		public int InfoSize=16;
		public bool DoTheThingThisCodeDoes=false;
	public void DumpScdArkInfo(string SCD_Ark_File_Path, int LevelNo)
	{
		string output="";
		StreamWriter writer = new StreamWriter( Application.dataPath + "//..//_scd_ark.txt", true);

		char[] scd_ark;	
		char[] scd_ark_file_data;
		if (!DataLoader.ReadStreamFile(Loader.BasePath +  SCD_Ark_File_Path, out scd_ark_file_data))
		{
			Debug.Log(Loader.BasePath + SCD_Ark_File_Path + " File not loaded");
						return;
		}	


		int NoOfBlocks=(int)DataLoader.getValAtAddress(scd_ark_file_data,0,32);
		for (LevelNo=0; LevelNo<NoOfBlocks; LevelNo++)
		{
				else
				{
						writer = new StreamWriter( Application.dataPath + "//..//_scd_ark.txt", false);			
				}



				char[] scd_ark;	
				char[] scd_ark_file_data;
				if (!DataLoader.ReadStreamFile(Loader.BasePath +  SCD_Ark_File_Path, out scd_ark_file_data))
				{
						Debug.Log(Loader.BasePath + SCD_Ark_File_Path + " File not loaded");
						return;
				}	

				int NoOfBlocks=(int)DataLoader.getValAtAddress(scd_ark_file_data,0,32);
				for (LevelNo=0; LevelNo<NoOfBlocks; LevelNo++)
				{

						long address_pointer=6;
						int compressionFlag=(int)DataLoader.getValAtAddress(scd_ark_file_data,address_pointer + (NoOfBlocks*4) + (LevelNo*4) ,32);
						long datalen =DataLoader.getValAtAddress(scd_ark_file_data,address_pointer + (NoOfBlocks*4*2) + (LevelNo*4) ,32);
						int isCompressed =(compressionFlag>>1) & 0x01;
						long AddressOfBlockStart;
						address_pointer=(LevelNo * 4) + 6;
						//Debug.Log("Block " + LevelNo + " Datalen is " + datalen + " at address " + ( (int)DataLoader.getValAtAddress(scd_ark_file_data,address_pointer,32) ));
						if ((int)DataLoader.getValAtAddress(scd_ark_file_data,address_pointer,32)==0)
						{
								Debug.Log("No Scd.ark data for this level");
						}

						if (isCompressed == 1)
						{//should not happen in scd.ark
								datalen=0;
			int add_ptr=0;
				//Output data
						//Debug.Log("block no " + LevelNo);
			output = output + "\nBlock no " + LevelNo + " at address " + AddressOfBlockStart + "\n";
			output = output+ "No of rows " + (int)DataLoader.getValAtAddress(scd_ark,add_ptr++,8) + "\n";
			int noOfRows = (int)DataLoader.getValAtAddress(scd_ark,0,8);
			if (noOfRows!=0)
								long BlockStart = DataLoader.getValAtAddress(scd_ark_file_data, address_pointer, 32);
				output = output + "Unknown info 1-325\n";
				for (int i=1;i<324;i++)
				{
					output = output + (int)DataLoader.getValAtAddress(scd_ark,add_ptr++,8) + ",";		
				}
			

				output = output +"\nRow Data\n";
				add_ptr=326;
								int r=0;
				//for (int i=0; i<noOfRows; i++)
				for (int i=326; i<datalen; i++)
				{				

					output = output + (int)DataLoader.getValAtAddress(scd_ark,add_ptr++,8) + ",";
					r++;
					if (r==16)
					{
							r=0;
							output = output +"\n"; 		
					}

													 
				}
			}
										int r=0;

										for (int i=326; i<datalen; i++)
										{			
												if (r==0)
												{
														output = output + AddressOfBlockStart+add_ptr + "," + LevelNo +",";	
												}
												switch(r)
												{													
												case 2://type
														{
																output = output + (int)DataLoader.getValAtAddress(scd_ark,add_ptr,8) +"," ;
																switch ((int)DataLoader.getValAtAddress(scd_ark,add_ptr,8))
																{//TODO:Add all the identified types in event_action.cs
																case event_base.RowTypeSetNPCGoal:
																		output = output + "SetGoal";
																		break;
																case event_base.RowTypeCondition:
																		output = output + "Condition";
																		break;
																case event_base.RowTypeKillNPC:
																		output =output+"KillNPC";
																		break;
																case event_base.RowTypeFireTriggers:
																		output = output + "FireTrigger";
																		break;
																case event_base.RowTypeScheduled:
																		output = output + "ScheduledEvent";
																		break;
																case event_base.RowTypeRaceAttidude:
																		output = output + "RaceAttitude";
																		break;
																case event_base.RowTypeSetProps:
																		output = output + "SetProps";
																		break;
																case event_base.RowTypeRemoveNPC:
																		output = output + "RemoveNPC";
																		break;
																case event_base.RowTypeKillNPCorRace:
																		output=output + "KillNPCorRace";
																		break;
																case event_base.RowTypePlaceNPC:
																		output = output + "PlaceNPC";
																		break;
																case event_base.RowTypeSetNPCGOAL_Alt:
																		output = output + "SetGoal Alt";
																		break;
																default:
																		output = output + "UNK";
																		break;
																}

																add_ptr++;
																break;
														}

												default:
														output = output + (int)DataLoader.getValAtAddress(scd_ark,add_ptr++,8);// + ",";
														break;
												}


												r++;
												if (r==16)
												{
														r=0;
														output = output +"\n"; 		
												}
												else
												{
														output=output + ",";	
												}

										}
										output = output +"\n";
								}

						}
						else
						{
								output = output + "Block no " + LevelNo + " at address " + AddressOfBlockStart + "\n";
								output = output+ "No of rows " + (int)DataLoader.getValAtAddress(scd_ark,add_ptr++,8) + "\n";
								int noOfRows = (int)DataLoader.getValAtAddress(scd_ark,0,8);
								if (noOfRows!=0)
								{
										output = output + "Unknown info 1-325\n";
										for (int i=1;i<324;i++)
										{
												output = output + (int)DataLoader.getValAtAddress(scd_ark,add_ptr++,8) + "\n";		
										}


										output = output +"Row Data\nr\n";
										add_ptr=326;
										int r=0;

										for (int i=326; i<datalen; i++)
										{				

												output = output + (int)DataLoader.getValAtAddress(scd_ark,add_ptr++,8) + "\n";
												r++;
												if (r==16)
												{
														r=0;
														output = output +"r\n"; 		
												}

										}
								}		
						}


				}
				writer.WriteLine(output);
				writer.Close();

		}
}

<MSG> Properly implemented x_traps to support variable updating.
Implemented the hack trap variant that signals the player trespassing into a tile.
Begun work on implementing string number differences (block no 1) between uw1 and uw2.
Tweak to decal positioning.

<DFF> @@ -3,6 +3,7 @@ using System.Collections;
 using System.Text;
 using System.IO;
 
+
 //SCD.ark in uw2 does things. I don't know what they are yet. 
 
 public class WhatTheHellIsSCD_ARK : UWEBase {
@@ -12,17 +13,16 @@ public class WhatTheHellIsSCD_ARK : UWEBase {
 	public void DumpScdArkInfo(string SCD_Ark_File_Path, int LevelNo)
 	{
 		string output="";
-		StreamWriter writer = new StreamWriter( Application.dataPath + "//..//_scd_ark.txt", true);
-
+		StreamWriter writer = new StreamWriter( Application.dataPath + "//..//_scd_ark.txt", false);
+		
 		char[] scd_ark;	
 		char[] scd_ark_file_data;
 		if (!DataLoader.ReadStreamFile(Loader.BasePath +  SCD_Ark_File_Path, out scd_ark_file_data))
 		{
 			Debug.Log(Loader.BasePath + SCD_Ark_File_Path + " File not loaded");
-						return;
+			return;
 		}	
 
-
 		int NoOfBlocks=(int)DataLoader.getValAtAddress(scd_ark_file_data,0,32);
 		for (LevelNo=0; LevelNo<NoOfBlocks; LevelNo++)
 		{
@@ -63,7 +63,7 @@ public class WhatTheHellIsSCD_ARK : UWEBase {
 			int add_ptr=0;
 				//Output data
 						//Debug.Log("block no " + LevelNo);
-			output = output + "\nBlock no " + LevelNo + " at address " + AddressOfBlockStart + "\n";
+			output = output + "Block no " + LevelNo + " at address " + AddressOfBlockStart + "\n";
 			output = output+ "No of rows " + (int)DataLoader.getValAtAddress(scd_ark,add_ptr++,8) + "\n";
 			int noOfRows = (int)DataLoader.getValAtAddress(scd_ark,0,8);
 			if (noOfRows!=0)
@@ -71,25 +71,24 @@ public class WhatTheHellIsSCD_ARK : UWEBase {
 				output = output + "Unknown info 1-325\n";
 				for (int i=1;i<324;i++)
 				{
-					output = output + (int)DataLoader.getValAtAddress(scd_ark,add_ptr++,8) + ",";		
+					output = output + (int)DataLoader.getValAtAddress(scd_ark,add_ptr++,8) + "\n";		
 				}
 			
 
-				output = output +"\nRow Data\n";
+				output = output +"Row Data\nr\n";
 				add_ptr=326;
-								int r=0;
-				//for (int i=0; i<noOfRows; i++)
+				int r=0;
+				
 				for (int i=326; i<datalen; i++)
 				{				
 
-					output = output + (int)DataLoader.getValAtAddress(scd_ark,add_ptr++,8) + ",";
+					output = output + (int)DataLoader.getValAtAddress(scd_ark,add_ptr++,8) + "\n";
 					r++;
 					if (r==16)
 					{
 							r=0;
-							output = output +"\n"; 		
+							output = output +"r\n"; 		
 					}
-
 													 
 				}
 			}

Properly implemented x_traps to support variable updating. Implemented the hack trap variant that signals the player trespassing into a tile. Begun work on implementing string number differences (block no 1) between uw1 and uw2. Tweak to decal positioning.