Skip to content

Commit 9b5bb91

Browse files
committed
Implemented Scripts and Magic Effects, scripts save their source as a .fnvscript file
1 parent 54a2398 commit 9b5bb91

26 files changed

Lines changed: 1982 additions & 6 deletions

ESPSharp/ESPSharp.csproj

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,17 @@
6464
<Compile Include="Enums\BodyPartIndex.cs" />
6565
<Compile Include="Enums\EnvironmentType.cs" />
6666
<Compile Include="Enums\Flags\DecalDataFlags.cs" />
67+
<Compile Include="Enums\Flags\LocalVariableFlag.cs" />
68+
<Compile Include="Enums\Flags\MagicEffectFlags.cs" />
6769
<Compile Include="Enums\Flags\RaceFlags.cs" />
70+
<Compile Include="Enums\Flags\ScriptFlags.cs" />
6871
<Compile Include="Enums\Flags\SoundDataFlags.cs" />
6972
<Compile Include="Enums\HairColor.cs" />
7073
<Compile Include="Enums\HeadPartIndex.cs" />
7174
<Compile Include="Enums\IsInterior.cs" />
75+
<Compile Include="Enums\MagicEffectArchetype.cs" />
76+
<Compile Include="Enums\MagicSchool.cs" />
77+
<Compile Include="Enums\ScriptType.cs" />
7278
<Compile Include="Interfaces\ICloneable.cs" />
7379
<Compile Include="Enums\ActorValues.cs" />
7480
<Compile Include="Enums\DataSource.cs" />
@@ -155,6 +161,11 @@
155161
<DesignTime>True</DesignTime>
156162
<DependentUpon>HeadPart.tt</DependentUpon>
157163
</Compile>
164+
<Compile Include="Records\GeneratedCode\MagicEffect.cs">
165+
<AutoGen>True</AutoGen>
166+
<DesignTime>True</DesignTime>
167+
<DependentUpon>MagicEffect.tt</DependentUpon>
168+
</Compile>
158169
<Compile Include="Records\GeneratedCode\MenuIcon.cs">
159170
<AutoGen>True</AutoGen>
160171
<DesignTime>True</DesignTime>
@@ -165,6 +176,11 @@
165176
<DesignTime>True</DesignTime>
166177
<DependentUpon>Race.tt</DependentUpon>
167178
</Compile>
179+
<Compile Include="Records\GeneratedCode\Script.cs">
180+
<AutoGen>True</AutoGen>
181+
<DesignTime>True</DesignTime>
182+
<DependentUpon>Script.tt</DependentUpon>
183+
</Compile>
168184
<Compile Include="Records\GeneratedCode\Sound.cs">
169185
<AutoGen>True</AutoGen>
170186
<DesignTime>True</DesignTime>
@@ -176,13 +192,19 @@
176192
<DesignTime>True</DesignTime>
177193
<DependentUpon>TextureSet.tt</DependentUpon>
178194
</Compile>
195+
<Compile Include="Records\Script.cs" />
179196
<Compile Include="Subrecord.cs" />
180197
<Compile Include="SubrecordCollection.cs" />
181198
<Compile Include="SubrecordCollections\GeneratedCode\BodyModel.cs">
182199
<AutoGen>True</AutoGen>
183200
<DesignTime>True</DesignTime>
184201
<DependentUpon>BodyModel.tt</DependentUpon>
185202
</Compile>
203+
<Compile Include="SubrecordCollections\GeneratedCode\EmbeddedScript.cs">
204+
<AutoGen>True</AutoGen>
205+
<DesignTime>True</DesignTime>
206+
<DependentUpon>EmbeddedScript.tt</DependentUpon>
207+
</Compile>
186208
<Compile Include="SubrecordCollections\GeneratedCode\FaceGenData.cs">
187209
<AutoGen>True</AutoGen>
188210
<DesignTime>True</DesignTime>
@@ -208,6 +230,11 @@
208230
<DesignTime>True</DesignTime>
209231
<DependentUpon>Icon.tt</DependentUpon>
210232
</Compile>
233+
<Compile Include="SubrecordCollections\GeneratedCode\LocalVariable.cs">
234+
<AutoGen>True</AutoGen>
235+
<DesignTime>True</DesignTime>
236+
<DependentUpon>LocalVariable.tt</DependentUpon>
237+
</Compile>
211238
<Compile Include="SubrecordCollections\GeneratedCode\MasterFileData.cs">
212239
<AutoGen>True</AutoGen>
213240
<DesignTime>True</DesignTime>
@@ -227,18 +254,34 @@
227254
<Generator>TextTemplatingFileGenerator</Generator>
228255
<LastGenOutput>AcousticSpace.cs</LastGenOutput>
229256
</None>
257+
<None Include="Records\GeneratedCode\MagicEffect.tt">
258+
<Generator>TextTemplatingFileGenerator</Generator>
259+
<LastGenOutput>MagicEffect.cs</LastGenOutput>
260+
</None>
230261
<None Include="Records\GeneratedCode\Race.tt">
231262
<Generator>TextTemplatingFileGenerator</Generator>
232263
<LastGenOutput>Race.cs</LastGenOutput>
233264
</None>
265+
<None Include="Records\GeneratedCode\Script.tt">
266+
<Generator>TextTemplatingFileGenerator</Generator>
267+
<LastGenOutput>Script.cs</LastGenOutput>
268+
</None>
234269
<None Include="Records\GeneratedCode\Sound.tt">
235270
<Generator>TextTemplatingFileGenerator</Generator>
236271
<LastGenOutput>Sound.cs</LastGenOutput>
237272
</None>
273+
<None Include="SubrecordCollections\GeneratedCode\EmbeddedScript.tt">
274+
<Generator>TextTemplatingFileGenerator</Generator>
275+
<LastGenOutput>EmbeddedScript.cs</LastGenOutput>
276+
</None>
238277
<None Include="SubrecordCollections\GeneratedCode\FaceGenData.tt">
239278
<Generator>TextTemplatingFileGenerator</Generator>
240279
<LastGenOutput>FaceGenData.cs</LastGenOutput>
241280
</None>
281+
<None Include="SubrecordCollections\GeneratedCode\LocalVariable.tt">
282+
<Generator>TextTemplatingFileGenerator</Generator>
283+
<LastGenOutput>LocalVariable.cs</LastGenOutput>
284+
</None>
242285
<None Include="SubrecordCollections\GeneratedCode\RaceBodyData.tt">
243286
<Generator>TextTemplatingFileGenerator</Generator>
244287
<LastGenOutput>RaceBodyData.cs</LastGenOutput>
@@ -275,6 +318,16 @@
275318
<DesignTime>True</DesignTime>
276319
<DependentUpon>FactionData.tt</DependentUpon>
277320
</Compile>
321+
<Compile Include="Subrecords\GeneratedCode\LocalVariableData.cs">
322+
<AutoGen>True</AutoGen>
323+
<DesignTime>True</DesignTime>
324+
<DependentUpon>LocalVariableData.tt</DependentUpon>
325+
</Compile>
326+
<Compile Include="Subrecords\GeneratedCode\MagicEffectData.cs">
327+
<AutoGen>True</AutoGen>
328+
<DesignTime>True</DesignTime>
329+
<DependentUpon>MagicEffectData.tt</DependentUpon>
330+
</Compile>
278331
<Compile Include="Subrecords\GeneratedCode\ObjectBounds.cs">
279332
<AutoGen>True</AutoGen>
280333
<DesignTime>True</DesignTime>
@@ -315,6 +368,11 @@
315368
<DesignTime>True</DesignTime>
316369
<DependentUpon>Relationship.tt</DependentUpon>
317370
</Compile>
371+
<Compile Include="Subrecords\GeneratedCode\ScriptData.cs">
372+
<AutoGen>True</AutoGen>
373+
<DesignTime>True</DesignTime>
374+
<DependentUpon>ScriptData.tt</DependentUpon>
375+
</Compile>
318376
<Compile Include="Subrecords\GeneratedCode\SoundAttenuation.cs">
319377
<AutoGen>True</AutoGen>
320378
<DesignTime>True</DesignTime>
@@ -445,6 +503,14 @@
445503
<Generator>TextTemplatingFileGenerator</Generator>
446504
<LastGenOutput>FactionData.cs</LastGenOutput>
447505
</None>
506+
<None Include="Subrecords\GeneratedCode\LocalVariableData.tt">
507+
<Generator>TextTemplatingFileGenerator</Generator>
508+
<LastGenOutput>LocalVariableData.cs</LastGenOutput>
509+
</None>
510+
<None Include="Subrecords\GeneratedCode\MagicEffectData.tt">
511+
<Generator>TextTemplatingFileGenerator</Generator>
512+
<LastGenOutput>MagicEffectData.cs</LastGenOutput>
513+
</None>
448514
<None Include="Subrecords\GeneratedCode\ObjectBounds.tt">
449515
<Generator>TextTemplatingFileGenerator</Generator>
450516
<LastGenOutput>ObjectBounds.cs</LastGenOutput>
@@ -477,6 +543,10 @@
477543
<Generator>TextTemplatingFileGenerator</Generator>
478544
<LastGenOutput>Relationship.cs</LastGenOutput>
479545
</None>
546+
<None Include="Subrecords\GeneratedCode\ScriptData.tt">
547+
<Generator>TextTemplatingFileGenerator</Generator>
548+
<LastGenOutput>ScriptData.cs</LastGenOutput>
549+
</None>
480550
<None Include="Subrecords\GeneratedCode\SoundAttenuation.tt">
481551
<Generator>TextTemplatingFileGenerator</Generator>
482552
<LastGenOutput>SoundAttenuation.cs</LastGenOutput>
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
7+
namespace ESPSharp.Enums.Flags
8+
{
9+
[Flags]
10+
public enum LocalVariableFlag : byte
11+
{
12+
IsLongOrShort = 0x01
13+
}
14+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
7+
namespace ESPSharp.Enums.Flags
8+
{
9+
[Flags]
10+
public enum MagicEffectFlags : uint
11+
{
12+
Hostile = 0x01,
13+
Recover = 0x02,
14+
Detrimental = 0x04,
15+
Self = 0x10,
16+
Touch = 0x20,
17+
Target = 0x40,
18+
NoDuration = 0x80,
19+
NoMagnitude = 0x0100,
20+
NoArea = 0x0200,
21+
FXPersist = 0x0400,
22+
GoryVisuals = 0x1000,
23+
DisplayNameOnly = 0x2000,
24+
RadioBroadcast = 0x8000,
25+
UseSkill = 0x080000,
26+
UseAttribute = 0x100000,
27+
Painless = 0x01000000,
28+
SprayProjectile = 0x02000000,
29+
BoltProjectile = 0x04000000,
30+
NoHitEffect = 0x08000000,
31+
NoDeathDispel = 0x10000000
32+
}
33+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
7+
namespace ESPSharp.Enums.Flags
8+
{
9+
[Flags]
10+
public enum ScriptFlags : ushort
11+
{
12+
Enabled = 0x0001
13+
}
14+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
7+
namespace ESPSharp.Enums
8+
{
9+
public enum MagicEffectArchetype : uint
10+
{
11+
ValueModifier,
12+
Script,
13+
Dispel,
14+
CureDisease,
15+
Invisibility = 11,
16+
Chameleon,
17+
Light,
18+
Lock = 16,
19+
Open,
20+
BoundItem,
21+
SummonCreature,
22+
Paralysis = 24,
23+
CureParalysis = 30,
24+
CureAddiction,
25+
CurePoison,
26+
Concussion,
27+
ValueAndParts,
28+
LimbCondition,
29+
Turbo
30+
}
31+
}

ESPSharp/Enums/MagicSchool.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
7+
namespace ESPSharp.Enums
8+
{
9+
public enum MagicSchool : int
10+
{
11+
None = -1
12+
}
13+
}

ESPSharp/Enums/ScriptType.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
7+
namespace ESPSharp.Enums
8+
{
9+
public enum ScriptType : ushort
10+
{
11+
Object,
12+
Quest,
13+
Effect = 0x0100
14+
}
15+
}

ESPSharp/Group.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public static Group ReadXML(string sourceFolder)
6262
foreach (var folder in Directory.EnumerateDirectories(sourceFolder, "*.*", SearchOption.TopDirectoryOnly))
6363
outGroup.Subgroups.Add(Group.ReadXML(folder));
6464

65-
foreach (var file in Directory.EnumerateFiles(sourceFolder, "*.*", SearchOption.TopDirectoryOnly).Where(f => Path.GetFileName(f) != "GroupHeader.metadata"))
65+
foreach (var file in Directory.EnumerateFiles(sourceFolder, "*.xml", SearchOption.TopDirectoryOnly).Where(f => Path.GetFileName(f) != "GroupHeader.metadata"))
6666
outGroup.Records.Add(Record.ReadXML(file));
6767

6868
return outGroup;

ESPSharp/Record.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ public void WriteXML(string destinationFile)
5858
WriteDataXML(ele);
5959
}
6060

61+
XMLPostProcessing(root, destinationFile);
62+
6163
doc.Save(destinationFile);
6264
}
6365

@@ -78,7 +80,10 @@ public static Record ReadXML(string sourceFile)
7880
if (outRecord.compressionCorrupted)
7981
outRecord.corruptedBytes = root.Element("CorruptedBytes").ToBytes();
8082
else
83+
{
84+
outRecord.XMLPreProcessing(root, sourceFile);
8185
outRecord.ReadDataXML(root.Element("Subrecords"));
86+
}
8287

8388
return outRecord;
8489
}
@@ -189,6 +194,9 @@ byte[] CompressData(byte[] data)
189194

190195
public abstract void ReadDataXML(XElement ele);
191196

197+
protected virtual void XMLPreProcessing(XElement root, string sourceFile) { }
198+
protected virtual void XMLPostProcessing(XElement root, string destinationFile) { }
199+
192200
public static Record CreateRecord(string Tag)
193201
{
194202
Record outRecord;
@@ -231,6 +239,12 @@ public static Record CreateRecord(string Tag)
231239
case "ASPC":
232240
outRecord = new AcousticSpace();
233241
break;
242+
case "MGEF":
243+
outRecord = new MagicEffect();
244+
break;
245+
case "SCPT":
246+
outRecord = new Script();
247+
break;
234248
default:
235249
outRecord = new GenericRecord();
236250
break;

0 commit comments

Comments
 (0)