version "4.11"

// hack to work around the way Back to Saturn X overrides animated walls
Class BTSX_WallTexHack : LevelPostprocessor
{
	protected void Apply( Name checksum, String mapname )
	{
		switch ( checksum )
		{
		case 'none':
			break;
		// BTSX E1
		case '6B540CB40E3286392D751B864CA66887':
		case '4C3BF6AF9820508EE31DF8D843F23E16':
		case '71A7ACFFEB5E7C049B9BB74F2E3B5DE8':
		case '029AE63B6347BF751C3DEDF66CAAD482':
		case '7BA0F1B75B9F728694F1B095677996F9':
		case '4F6F564DC1111B1404B2EB98592BB004':
		case 'E7735454D31829FB4AB2105A555016AC':
		case 'A84ADD1717510CB7938B90B63E69C079':
		case '18016186740A47FBA7725665FFECE217':
		case 'A3C0623D8298976A455D2352BD1D5046':
		case 'C04798118FC1A201DC2432D3831A0242':
		case 'CA00C348BCCE29B4B9A3D1FB607B93E4':
		case 'ABA28CE49B50D37662C1F7D4384FF69B':
		case 'FF9C6545037C5E5E27CE0DACD24CDD37':
		case 'EE23F07016790919805B1687A48D4359':
		case 'A2768BFB108BECFB2BC72F0FF451A3C5':
		case '93E0BE2CEB98D3A7C894E9F7A4F529E9':
		case '8EBC137AE52213631EB1AFDCC684F039':
		case '9B228D89B29C58DB2EB1D4FA9A593B4E':
		case '763501BA83F71F40F701AA5D0DF526B3':
		case '4552A2DDB1DD3A1902D53CA0339FF511':
		case '63F849809707A7EEEBF4F8D227B33E55':
		case '6BCA4ED3445D671D152675A3998A3257':
		case '10DCCA9E002BADF735AE1DA51A4DD0A0':
		case '8EB23D513064DC25982C0EC67D6036ED':
		case '41424B65373083AB23E9C935D29F5862':
		case 'A7B0FCB6C5D140861438C6F29959E679':
		// BTSX E2
		case '067CF96073DB3CC4A8D887EE240F88DA':
		case 'D6CF27C2581299B107079C3B9C58C506':
		case '90D594DA59123CD8107123DB6A67780B':
		case 'BEE9E633B592BC8737431F5F4162B5B2':
		case '463C528B226C40E9F6BDF03B7D54774D':
		case '8C018455E4096683364F7AE4C7300D13':
		case '75856653D6A452FC0F36109F5C04945E':
		case '0FE91CAC01D6398D8073EACE99BF5BA3':
		case 'E25C9C4C4FB5F4CB92449650C13139EA':
		case 'BC906AC35C21D7689FB6D4E83A6F1D8B':
		case 'EB92F7955D2C5A70B92349AD4B2DA875':
		case 'CFEE7DB73A1683657DC0C08E27341DB2':
		case '094A256B57B8B53796F4ED399A55EAD3':
		case '7CC602C4E205F2C5EB58616FD22A115A':
		case '283F88B26D533288DA57E7C85FFABD2A':
		case '092ADA8B2891C77AED69860C03E89F95':
		case '760B1DA6C6340DE1C00063365419722A':
		case '1AE9A6410A6768CD36A7E187DCC616F6':
		case 'CF48593F9A638B0B610DB66A8DB79C66':
		case '6E1F2B0DA00A33C8DF98F53090E52B7F':
		case '246D1F31BC0AF3ECD630765429604BD1':
		case '1D544F22B220EA0095C84F6642135100':
		case 'D5F7C36C5A817EC4EED5452266B77681':
		case '941CD50E1FE1D598095F12561ADF783F':
		case '444C09AA8DA2DA763D39CBD9BDCA12ED':
		case '0F8415A7FABD85145782C3337DEE4F14':
		case '55F38C4344E02EC12200ED897F4522B1':
		case 'BFC69170CCE3550A0A53C4A556E7FD69':
		case '4D8523E2481F5D8C4E0A738BEC65DFD6':
		case '7B4DD64E2C237C8C7ED6E2F481B5E45F':
			// replace the following textures directly
			// it'll be fine since there are no ACS scripts to
			// worry about or whatever else
			level.ReplaceTextures("FWATER1","swwm_wtr",0);
			for ( int i=2; i<32; i++ )
				level.ReplaceTextures(String.Format("FWATER%02d",i),"swwm_wtr",0);
			level.ReplaceTextures("FWATER4","swwm_wtr",0);
			level.ReplaceTextures("LAVA1","swwm_lav",0);
			for ( int i=2; i<32; i++ )
				level.ReplaceTextures(String.Format("LAVA%02d",i),"swwm_lav",0);
			level.ReplaceTextures("LAVA4","swwm_lav",0);
			level.ReplaceTextures("NUKAGE1","swwm_nuk",0);
			for ( int i=2; i<32; i++ )
				level.ReplaceTextures(String.Format("NUKE%02d",i),"swwm_nuk",0);
			level.ReplaceTextures("NUKAGE3","swwm_nuk",0);
			level.ReplaceTextures("SLIME01","swwm_mug",0);
			for ( int i=2; i<32; i++ )
				level.ReplaceTextures(String.Format("SLUDG%02d",i),"swwm_mug",0);
			level.ReplaceTextures("SLIME04","swwm_mug",0);
			level.ReplaceTextures("SWATER1","swwm_wtp",0);
			for ( int i=2; i<32; i++ )
				level.ReplaceTextures(String.Format("COOLNT%02d",i),"swwm_wtp",0);
			level.ReplaceTextures("SWATER4","swwm_wtp",0);
			level.ReplaceTextures("BLOOD1","swwm_bld",0);
			for ( int i=2; i<32; i++ )
				level.ReplaceTextures(String.Format("BLOOD%02d",i),"swwm_bld",0);
			level.ReplaceTextures("BLOOD3","swwm_bld",0);
			level.ReplaceTextures("WFALL1","swwm_wfl",0);
			for ( int i=0x61; i<=0x66; i++ )
				level.ReplaceTextures(String.Format("WFALL%c",i),"swwm_wfl",0);
			level.ReplaceTextures("WFALL4","swwm_wfl",0);
			level.ReplaceTextures("DBRAIN1","swwm_lfl",0);
			for ( int i=2; i<8; i++ )
				level.ReplaceTextures(String.Format("LFALL%d",i),"swwm_lfl",0);
			level.ReplaceTextures("DBRAIN4","swwm_lfl",0);
			level.ReplaceTextures("FIREBLU1","swwm_wfp",0);
			for ( int i=2; i<8; i++ )
				level.ReplaceTextures(String.Format("CFALL%d",i),"swwm_wfp",0);
			level.ReplaceTextures("FIREBLU2","swwm_wfp",0);
			level.ReplaceTextures("SFALL1","swwm_sfl",0);
			for ( int i=2; i<8; i++ )
				level.ReplaceTextures(String.Format("SLFALL%d",i),"swwm_sfl",0);
			level.ReplaceTextures("SFALL4","swwm_sfl",0);
			level.ReplaceTextures("FIREMAG1","swwm_mfg",0);
			for ( int i=2; i<8; i++ )
				level.ReplaceTextures(String.Format("S2FALL%d",i),"swwm_mfg",0);
			level.ReplaceTextures("FIREMAG3","swwm_mfg",0);
			level.ReplaceTextures("BFALL1","swwm_bfl",0);
			for ( int i=2; i<8; i++ )
				level.ReplaceTextures(String.Format("BLFALL%d",i),"swwm_bfl",0);
			level.ReplaceTextures("BFALL4","swwm_bfl",0);
			break;
		}
	}
}

// for Sunder maps, where waterfalls are supposed to be lava falls
// and also there's sometimes upside-down blood falls (in MAP32)
Class Sunder_FallFix : LevelPostprocessor
{
	protected void Apply( Name checksum, String mapname )
	{
		switch ( checksum )
		{
		case 'none':
			break;
		// Sunder 2407.wad
		case '3C8309EAD9332E47E3241ABCD11467FD':
		case 'F75A9E66B7864BAEE0B2AC70EE839E79':
		case 'D0A4705C7AFE27D69CBC6D3BB02798EF':
		case '6D4B57175EB6AA9F62168FA7224ADEB4':
		case '0ABB014B183D3472468268191C355901':
		case 'BA66CD32E2E4C0CD770433ADED369B3F':
		case '67F8B594B296EE53CED47B63161C7B87':
		case '000889277FE94798E746D6BE7ED7D0F0':
		case 'CE81F22E2981F4DE4E24613A8886366A':
		case 'B9693AF68690F7707F7EA92F6ECABF44':
		case 'F7AE15DE0B7FF163FDCC61B9B3B4BB64':
		case 'D1D2EF95D5B3179CE62BEA77CA9C9115':
		case '4AFFC399DA351A621BB0CD0D57B10566':
		case '55605E7D28F4A0BA9A87126344C4A753':
		case '965D15632E04A1CDCF53030169C446F2':
		case 'B4F691EEFD4F9DE13915C0073ADD7186':
		case '77DE692763B84F140B550CCD01722171':
		case 'E57C25EB2DC3F6F2C6E830509B2E44D3':
		case '1BE9FF4810AA25FCDDB68B76C2F439A8':
		case '791FBDF257679B9A70E10DB2EBE5B425':
		case 'C2DF3F5CFEFECD6319EFD7F2964D62AB':
		case 'B498E843E1B6E2EFD5475EF186A8DA23':
			TextureID bfallu[4];
			for ( int i=0; i<4; i++ )
				bfallu[i] = TexMan.CheckForTexture(String.Format("BFALL%dU",i+1));
			// just flip all of these vertically, it just works™
			for ( int i=0; i<level.Lines.Size(); i++ )
			{
				let l = level.Lines[i];
				for ( int j=0; j<3; j++ ) for ( int k=0; k<4; k++ )
				{
					if ( l.sidedef[0].GetTexture(j) != bfallu[k] )
						continue;
					l.sidedef[0].MultiplyTextureYScale(j,-1.);
				}
				if ( !l.sidedef[1] ) continue;
				for ( int j=0; j<3; j++ ) for ( int k=0; k<4; k++ )
				{
					if ( l.sidedef[1].GetTexture(j) != bfallu[k] )
						continue;
					l.sidedef[1].MultiplyTextureYScale(j,-1.);
				}
			}
			// and now, replace the textures
			for ( int i=1; i<=4; i++ )
			{
				level.ReplaceTextures(String.Format("WFALL%d",i),"swwm_lfl",0);
				level.ReplaceTextures(String.Format("BFALL%dU",i),"swwm_bfl",0);
			}
			break;
		}
	}
}
