Worms4Editor/LibW4M/Data/Schemes/SchemeData.cs

386 lines
23 KiB
C#

using LibXom.Data;
using LibXom.Streams;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LibW4M.Data.Schemes
{
public class SchemeData : SaveDataEntry
{
public override string FriendlyName
{
get
{
return this.Name.Value;
}
}
public XomString Name;
public bool Permanant;
public XomString Lock;
public WeaponSettingsData Airstrike;
public WeaponSettingsData BananaBomb;
public WeaponSettingsData BaseballBat;
public WeaponSettingsData Bazooka;
public WeaponSettingsData ClusterGrenade;
public WeaponSettingsData ConcreteDonkey;
public WeaponSettingsData CrateShower;
public WeaponSettingsData CrateSpy;
public WeaponSettingsData DoubleDamage;
public WeaponSettingsData Dynamite;
public WeaponSettingsData FirePunch;
public WeaponSettingsData GasCanister;
public WeaponSettingsData Girder;
public WeaponSettingsData Grenade;
public WeaponSettingsData HolyHandGrenade;
public WeaponSettingsData HomingMissile;
public WeaponSettingsData Jetpack;
public WeaponSettingsData Landmine;
public WeaponSettingsData NinjaRope;
public WeaponSettingsData OldWoman;
public WeaponSettingsData Parachute;
public WeaponSettingsData Prod;
public WeaponSettingsData SelectWorm;
public WeaponSettingsData Sheep;
public WeaponSettingsData Shotgun;
public WeaponSettingsData SkipGo;
public WeaponSettingsData SuperSheep;
public WeaponSettingsData Redbull;
public WeaponSettingsData Flood;
public WeaponSettingsData Armour;
public WeaponSettingsData WeaponFactoryWeapon;
public WeaponSettingsData AlienAbduction;
public WeaponSettingsData Fatkins;
public WeaponSettingsData Scouser;
public WeaponSettingsData NoMoreNails;
public WeaponSettingsData PoisonArrow;
public WeaponSettingsData SentryGun;
public WeaponSettingsData SniperRifle;
public WeaponSettingsData SuperAirstrike;
public WeaponSettingsData BubbleTrouble;
public WeaponSettingsData Starburst;
public WeaponSettingsData Surrender;
public WeaponSettingsData MineLayerMystery;
public WeaponSettingsData MineTripletMystery;
public WeaponSettingsData BarrelTripletMystery;
public WeaponSettingsData FloodMystery;
public WeaponSettingsData DisarmMystery;
public WeaponSettingsData TeleportMystery;
public WeaponSettingsData QuickWalkMystery;
public WeaponSettingsData LowGravityMystery;
public WeaponSettingsData DoubleTurnTimeMystery;
public WeaponSettingsData HealthMystery;
public WeaponSettingsData DamageMystery;
public WeaponSettingsData SuperHealthMystery;
public WeaponSettingsData SpecialWeaponMystery;
public WeaponSettingsData BadPoisonMystery;
public WeaponSettingsData GoodPoisonMystery;
public int ArtileryMode;
public int TeleportIn;
public int Wins;
public int WormSelect;
public int WormHealth;
public int RoundTime;
public int TurnTime;
public int Objects; // TODO: make this an enum
public int RandomCrateChancePerTurn;
public int MysteryChance;
public int WeaponChance;
public int UtilityChance;
public int HealthChance;
public int HealthInCrates;
public int Stockpiling; // TODO: make this an enum too
public int SuddenDeath; // TODO: make this an enum too
public int WaterSpeed; // TODO: make this an enum too
public int DisplayTime;
public int LandTime;
public int RopeTime;
public int FallDamage;
public int HotSeat;
public int Special;
public int MineFuse;
public int HelpPanelDelay;
public bool MineFactoryOn;
public bool TelepadsOn;
public int WindMaxStrength;
public SchemeData(W4SaveFile fileBelongs, XomContainer mainContainer) : base(fileBelongs, mainContainer)
{
}
public override void Load()
{
using (XomStreamReader reader = new XomStreamReader(new MemoryStream(this.mainContainer.GetData())))
{
reader.Skip(3);
this.Name = fileBelongs.LookupStringFromId(reader.ReadCompressedInt());
this.Permanant = reader.ReadBool();
this.Lock = fileBelongs.LookupStringFromId(reader.ReadCompressedInt());
// Read WeaponSettingsData
this.Airstrike = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.BananaBomb = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.BaseballBat = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.Bazooka = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.ClusterGrenade = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.ConcreteDonkey = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.CrateShower = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.CrateSpy = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.DoubleDamage = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.Dynamite = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.FirePunch = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.GasCanister = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.Girder = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.Grenade = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.HolyHandGrenade = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.HomingMissile = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.Jetpack = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.Landmine = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.NinjaRope = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.OldWoman = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.Parachute = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.Prod = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.SelectWorm = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.Sheep = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.Shotgun = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.SkipGo = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.SuperSheep = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.Redbull = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.Flood = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.Armour = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.WeaponFactoryWeapon = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.AlienAbduction = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.Fatkins = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.Scouser = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.NoMoreNails = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.PoisonArrow = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.SentryGun = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.SniperRifle = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.SuperAirstrike = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.BubbleTrouble = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.Starburst = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.Surrender = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.MineLayerMystery = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.MineTripletMystery = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.BarrelTripletMystery = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.FloodMystery = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.DisarmMystery = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.TeleportMystery = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.QuickWalkMystery = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.LowGravityMystery = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.DoubleTurnTimeMystery = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.HealthMystery = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.DamageMystery = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.SuperHealthMystery = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.SpecialWeaponMystery = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.BadPoisonMystery = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.GoodPoisonMystery = new WeaponSettingsData(fileBelongs, fileBelongs.xomFile.GetContainerById(reader.ReadCompressedInt()));
this.ArtileryMode = reader.ReadInt32();
this.TeleportIn = reader.ReadInt32();
this.Wins = reader.ReadInt32();
this.WormSelect = reader.ReadInt32();
this.WormHealth = reader.ReadInt32();
this.RoundTime = reader.ReadInt32();
this.TurnTime = reader.ReadInt32();
this.Objects = reader.ReadInt32();
this.RandomCrateChancePerTurn = reader.ReadInt32();
this.MysteryChance = reader.ReadInt32();
this.WeaponChance = reader.ReadInt32();
this.UtilityChance = reader.ReadInt32();
this.HealthChance = reader.ReadInt32();
this.HealthInCrates = reader.ReadInt32();
this.Stockpiling = reader.ReadInt32();
this.SuddenDeath = reader.ReadInt32();
this.WaterSpeed = reader.ReadInt32();
this.DisplayTime = reader.ReadInt32();
this.LandTime = reader.ReadInt32();
this.RopeTime = reader.ReadInt32();
this.FallDamage = reader.ReadInt32();
this.HotSeat = reader.ReadInt32();
this.Special = reader.ReadInt32();
this.MineFuse = reader.ReadInt32();
this.HelpPanelDelay = reader.ReadInt32();
this.MineFactoryOn = reader.ReadBool();
this.TelepadsOn = reader.ReadBool();
this.WindMaxStrength = reader.ReadInt32();
}
}
public override void Save()
{
// Save all WeaponSettingsData.
this.Airstrike.Save();
this.BananaBomb.Save();
this.BaseballBat.Save();
this.Bazooka.Save();
this.ClusterGrenade.Save();
this.ConcreteDonkey.Save();
this.CrateShower.Save();
this.CrateSpy.Save();
this.DoubleDamage.Save();
this.Dynamite.Save();
this.FirePunch.Save();
this.GasCanister.Save();
this.Girder.Save();
this.Grenade.Save();
this.HolyHandGrenade.Save();
this.HomingMissile.Save();
this.Jetpack.Save();
this.Landmine.Save();
this.NinjaRope.Save();
this.OldWoman.Save();
this.Parachute.Save();
this.Prod.Save();
this.SelectWorm.Save();
this.Sheep.Save();
this.Shotgun.Save();
this.SkipGo.Save();
this.SuperSheep.Save();
this.Redbull.Save();
this.Flood.Save();
this.Armour.Save();
this.WeaponFactoryWeapon.Save();
this.AlienAbduction.Save();
this.Fatkins.Save();
this.Scouser.Save();
this.NoMoreNails.Save();
this.PoisonArrow.Save();
this.SentryGun.Save();
this.SniperRifle.Save();
this.SuperAirstrike.Save();
this.BubbleTrouble.Save();
this.Starburst.Save();
this.Surrender.Save();
this.MineLayerMystery.Save();
this.MineTripletMystery.Save();
this.BarrelTripletMystery.Save();
this.FloodMystery.Save();
this.DisarmMystery.Save();
this.TeleportMystery.Save();
this.QuickWalkMystery.Save();
this.LowGravityMystery.Save();
this.DoubleTurnTimeMystery.Save();
this.HealthMystery.Save();
this.DamageMystery.Save();
this.SuperHealthMystery.Save();
this.SpecialWeaponMystery.Save();
this.BadPoisonMystery.Save();
this.GoodPoisonMystery.Save();
// Save scheme
using (MemoryStream ms = new MemoryStream())
{
using (XomStreamWriter writer = new XomStreamWriter(ms))
{
writer.Skip(3);
writer.WriteCompressedInt(this.Name.Id);
writer.WriteBool(this.Permanant);
writer.WriteCompressedInt(this.Lock.Id);
writer.WriteCompressedInt(this.Airstrike.mainContainer.Id);
writer.WriteCompressedInt(this.BananaBomb.mainContainer.Id);
writer.WriteCompressedInt(this.BaseballBat.mainContainer.Id);
writer.WriteCompressedInt(this.Bazooka.mainContainer.Id);
writer.WriteCompressedInt(this.ClusterGrenade.mainContainer.Id);
writer.WriteCompressedInt(this.ConcreteDonkey.mainContainer.Id);
writer.WriteCompressedInt(this.CrateShower.mainContainer.Id);
writer.WriteCompressedInt(this.CrateSpy.mainContainer.Id);
writer.WriteCompressedInt(this.DoubleDamage.mainContainer.Id);
writer.WriteCompressedInt(this.Dynamite.mainContainer.Id);
writer.WriteCompressedInt(this.FirePunch.mainContainer.Id);
writer.WriteCompressedInt(this.GasCanister.mainContainer.Id);
writer.WriteCompressedInt(this.Girder.mainContainer.Id);
writer.WriteCompressedInt(this.Grenade.mainContainer.Id);
writer.WriteCompressedInt(this.HolyHandGrenade.mainContainer.Id);
writer.WriteCompressedInt(this.HomingMissile.mainContainer.Id);
writer.WriteCompressedInt(this.Jetpack.mainContainer.Id);
writer.WriteCompressedInt(this.Landmine.mainContainer.Id);
writer.WriteCompressedInt(this.NinjaRope.mainContainer.Id);
writer.WriteCompressedInt(this.OldWoman.mainContainer.Id);
writer.WriteCompressedInt(this.Parachute.mainContainer.Id);
writer.WriteCompressedInt(this.Prod.mainContainer.Id);
writer.WriteCompressedInt(this.SelectWorm.mainContainer.Id);
writer.WriteCompressedInt(this.Sheep.mainContainer.Id);
writer.WriteCompressedInt(this.Shotgun.mainContainer.Id);
writer.WriteCompressedInt(this.SkipGo.mainContainer.Id);
writer.WriteCompressedInt(this.SuperSheep.mainContainer.Id);
writer.WriteCompressedInt(this.Redbull.mainContainer.Id);
writer.WriteCompressedInt(this.Flood.mainContainer.Id);
writer.WriteCompressedInt(this.Armour.mainContainer.Id);
writer.WriteCompressedInt(this.WeaponFactoryWeapon.mainContainer.Id);
writer.WriteCompressedInt(this.AlienAbduction.mainContainer.Id);
writer.WriteCompressedInt(this.Fatkins.mainContainer.Id);
writer.WriteCompressedInt(this.Scouser.mainContainer.Id);
writer.WriteCompressedInt(this.NoMoreNails.mainContainer.Id);
writer.WriteCompressedInt(this.PoisonArrow.mainContainer.Id);
writer.WriteCompressedInt(this.SentryGun.mainContainer.Id);
writer.WriteCompressedInt(this.SniperRifle.mainContainer.Id);
writer.WriteCompressedInt(this.SuperAirstrike.mainContainer.Id);
writer.WriteCompressedInt(this.BubbleTrouble.mainContainer.Id);
writer.WriteCompressedInt(this.Starburst.mainContainer.Id);
writer.WriteCompressedInt(this.Surrender.mainContainer.Id);
writer.WriteCompressedInt(this.MineLayerMystery.mainContainer.Id);
writer.WriteCompressedInt(this.MineTripletMystery.mainContainer.Id);
writer.WriteCompressedInt(this.BarrelTripletMystery.mainContainer.Id);
writer.WriteCompressedInt(this.FloodMystery.mainContainer.Id);
writer.WriteCompressedInt(this.DisarmMystery.mainContainer.Id);
writer.WriteCompressedInt(this.TeleportMystery.mainContainer.Id);
writer.WriteCompressedInt(this.QuickWalkMystery.mainContainer.Id);
writer.WriteCompressedInt(this.LowGravityMystery.mainContainer.Id);
writer.WriteCompressedInt(this.DoubleTurnTimeMystery.mainContainer.Id);
writer.WriteCompressedInt(this.HealthMystery.mainContainer.Id);
writer.WriteCompressedInt(this.DamageMystery.mainContainer.Id);
writer.WriteCompressedInt(this.SuperHealthMystery.mainContainer.Id);
writer.WriteCompressedInt(this.SpecialWeaponMystery.mainContainer.Id);
writer.WriteCompressedInt(this.BadPoisonMystery.mainContainer.Id);
writer.WriteCompressedInt(this.GoodPoisonMystery.mainContainer.Id);
writer.WriteInt32(this.ArtileryMode);
writer.WriteInt32(this.TeleportIn);
writer.WriteInt32(this.Wins);
writer.WriteInt32(this.WormSelect);
writer.WriteInt32(this.WormHealth);
writer.WriteInt32(this.RoundTime);
writer.WriteInt32(this.TurnTime);
writer.WriteInt32(this.Objects);
writer.WriteInt32(this.RandomCrateChancePerTurn);
writer.WriteInt32(this.MysteryChance);
writer.WriteInt32(this.WeaponChance);
writer.WriteInt32(this.UtilityChance);
writer.WriteInt32(this.HealthChance);
writer.WriteInt32(this.HealthInCrates);
writer.WriteInt32(this.Stockpiling);
writer.WriteInt32(this.SuddenDeath);
writer.WriteInt32(this.WaterSpeed);
writer.WriteInt32(this.DisplayTime);
writer.WriteInt32(this.LandTime);
writer.WriteInt32(this.RopeTime);
writer.WriteInt32(this.FallDamage);
writer.WriteInt32(this.HotSeat);
writer.WriteInt32(this.Special);
writer.WriteInt32(this.MineFuse);
writer.WriteInt32(this.HelpPanelDelay);
writer.WriteBool(this.MineFactoryOn);
writer.WriteBool(this.TelepadsOn);
writer.WriteInt32(this.WindMaxStrength);
ms.Seek(0x00, SeekOrigin.Begin);
mainContainer.SetData(ms.ToArray());
}
}
}
}
}