Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,6 @@ bin/
obj/
/packages/
riderModule.iml
/_ReSharper.Caches/
/_ReSharper.Caches/
/.vs/
/resources/
2 changes: 1 addition & 1 deletion SilkySouls3/MainWindow.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ public MainWindow()
gameTickService, spEffectService);
var enemyViewModel = new EnemyViewModel(enemyService, cinderService, hotkeyManager, _stateService,
paramService, debugDrawService, chrInsService, spEffectService, eventService, reminderService,
itemService);
itemService, travelService, playerService, _dlcService);
var itemViewModel = new ItemViewModel(itemService, _stateService);
var activateOnLaunchManager = new ActivateOnLaunchManager();
var activateOnLaunchViewModel = new ActivateOnLaunchViewModel(playerViewModel, targetViewModel,
Expand Down
8 changes: 8 additions & 0 deletions SilkySouls3/Models/BossFlag.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
namespace SilkySouls3.Models
{
public class BossFlag
{
public int EventId { get; set; }
public bool Value { get; set; }
}
}
20 changes: 20 additions & 0 deletions SilkySouls3/Models/BossRevive.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
using System.Collections.Generic;
using System.Numerics;
using SilkySouls3.Enums;

namespace SilkySouls3.Models
{
public class BossRevive
{
public DlcRequirement DlcRequirement { get; set; }
public string Area { get; set; }
public string BossName { get; set; }
public int BlockId { get; set; }
public List<BossFlag> FirstEncounterFlags { get; set; }
public List<BossFlag> BossFlags { get; set; }
public int BonfireId { get; set; }
public Vector3? Coords { get; set; }
public float Angle { get; set; }
public int? FirstEncounterItemId { get; set; }
}
}
9 changes: 9 additions & 0 deletions SilkySouls3/Properties/Resources.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

29 changes: 28 additions & 1 deletion SilkySouls3/Properties/Resources.resx
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ c3 ret</value>
0,Road of Sacrifices,Keep Ruins,0x2D03,4,3301954
0,Road of Sacrifices,Farron Keep Perimeter,0x2D03,5,3301958
0,Road of Sacrifices,Old Wolf of Farron,0x2D03,3,3301955
0,Road of Sacrifices,Abyss Watchers,0x2D02,7,3301954
0,Road of Sacrifices,Abyss Watchers,0x2D02,7,3301951
0,Cathedral of the Deep,Cathedral of the Deep,0x2D03,6,3501953
0,Cathedral of the Deep,Cleansing Chapel,0x3C03,4,3501950
0,Cathedral of the Deep,Deacons of the Deep,0x3C03,7,3501951
Expand Down Expand Up @@ -1763,6 +1763,33 @@ c3 ret</value>
<value>48 8d 8b 28 0b 00 00 lea rcx,[rbx+0xb28]
48 8d 15 00 00 00 00 lea rdx,[rip+0x0] # e &lt;_main+0xe&gt;
e9 00 00 00 00 jmp 13 &lt;_main+0x13&gt;</value>
</data>
<data name="BossRevives" xml:space="preserve">
<value>0,Cemetary of Ash,Iudex Gundyr,671088640,14000801|14000802,14000800|9319|6319|64000260|14000002,4001952,123.96|-63.95|554.54,-2.71
0,Cemetary of Ash,Champion Gundyr,671088640,14000831,14000830|9320|6320|14000004|64000261,4001953,124.44|-63.98|554.00,-2.95
0,High Wall of Lothric,Vordt of the Boreal Valley,503316480,13000801,13000800|9301|6301|13000002,3001955,27.61|-25.49|51.48,-0.01
0,High Wall of Lothric,Dancer of the Boreal Valley,503316480,13000896,13000890|9300|6300|13000885|13000004,3001955,27.54|-8.58|126.75,3.14,1073743941
0,High Wall of Lothric,Oceiros the Consumed King,503316480,13000838,13000830|9302|6302|63000251|13000001,3001954,-73.99|-49.43|360.94,2.89
0,Undead Settlement,Curse-Rotted Greatwood,520093696,13100801,13100800|9303|6303|13100001,3101953,134.07|-180.74|-874.74,-0.31
0,Road of Sacrifices,Crystal Sage,553648128,13300852,13300850|9306|6306|13300002,3301957,-156.24|-249.25|-424.70,1.84
0,Road of Sacrifices,Abyss Watchers,553648128,13300801,13300800|9307|6307|13300421|13300001,3301958,272.16|-248.78|-485.06,-1.50
0,Cathedral of the Deep,Deacons of the Deep,587202560,13500801,13500800|9311|6311|13500001,3501950,-449.63|-196.57|-617.35,1.09
0,Catacombs of Carthus,High Lord Wolnir,637534208,13800801,13800800|9315|6315|13801800|63800561|13800000,3801950,,
0,Catacombs of Carthus,Old Demon King,637534208,13800831,13800830|9317|6317|13800004,3801954,291.62|-326.35|-920.68,-0.36
0,Irithyll of the Boreal Valley,Pontiff Sulyvahn,620756992,13700851,13700850|9313|6313|13700420|13700421|13700422|13700001,3701955,397.70|-224.75|-1116.94,-0.14
0,Irithyll of the Boreal Valley,Aldrich Devourer of Gods,620756992,13700801,13700800|9314|6314|13700002,3701953,687.84|-121.36|-1079.03,-1.62
0,Irithyll Dungeon,Yhorm the Giant,654311424,13900801,13900800|9318|6318|13900001,3901952,121.35|-424.86|-615.54,-2.95
0,Lothric Castle,Dragonslayer Armour,503382016,,13010800|9308|6308|13010001,3011952,-32.29|59.76|222.63,1.64
0,Lothric Castle,Twin Princes,570490880,13410831|1400|1401|1415|1418,13410830|9309|6309|13410000,3411951,-24.58|141.97|312.01,-1.98
0,Archdragon Peak,Ancient Wyvern,536870912,13200801,13200800|9305|6305,3201950,-72.19|29.08|180.67,-2.59
0,Archdragon Peak,Nameless King,536870912,13200440|13200445,13200850|9304|6304|13200855|13200856|13200862|13200001,3201952,80.56|80.95|345.12,0.57
0,Kiln of the First Flame,Soul of Cinder,687865856,14100801,14100800|9321|6321|14101100|14100002,4101951,-141.83|1590.25|38.51,-2.84
1,The Painted World of Ariandel,Sister Friede,754974720,14500801,14500800|9322|6322|14500000|14500162|14500620:1|1720|1721|1735|1738,4501950,-186.99|27.75|-230.16,1.57
1,The Painted World of Ariandel,Champion's Gravetender,754974720,,14500860|14500861|9323|6323|14500006,4501957,-40.38|-97.91|-311.90,1.38
2,The Dreg Heap,Demon Prince,838860800,,15000800|9324|6324|15000000,5001953,135.26|-89.80|61.34,-1.25
2,The Ringed City,Darkeater Midir,855638016,15100851,15100850|9326|6326|15100001,5101953,-484.42|-83.08|-398.50,-2.42
2,The Ringed City,Halflight Spear of the Church,855638016,15100801,15100800|9325|6325,5101953,-380.77|-55.31|-323.59,2.96
2,The Ringed City,Slave Knight Gael,855703552,15110801,15110800|9327|6327|15110000,5111951,219.36|527.21|192.72,0.93</value>
</data>
<data name="BonfiresByBlockId" xml:space="preserve">
<value>0,671088640,4001951
Expand Down
2 changes: 2 additions & 0 deletions SilkySouls3/SilkySouls3.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,8 @@
<Compile Include="Models\Item.cs" />
<Compile Include="Models\ItemDrop.cs" />
<Compile Include="Models\Loadout.cs" />
<Compile Include="Models\BossFlag.cs" />
<Compile Include="Models\BossRevive.cs" />
<Compile Include="Models\Poise.cs" />
<Compile Include="Models\Position.cs" />
<Compile Include="Models\Resistances.cs" />
Expand Down
81 changes: 81 additions & 0 deletions SilkySouls3/Utilities/DataLoader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,87 @@ public static Dictionary<string, List<WarpLocation>> GetWarpLocations()
return warpDict;
}

public static Dictionary<string, List<BossRevive>> GetBossRevives()
{
Dictionary<string, List<BossRevive>> bossRevives = new Dictionary<string, List<BossRevive>>();
string csvData = Resources.BossRevives;
if (string.IsNullOrWhiteSpace(csvData)) return bossRevives;

using StringReader reader = new StringReader(csvData);
string line;
while ((line = reader.ReadLine()) != null)
{
if (string.IsNullOrWhiteSpace(line) || line.StartsWith("#")) continue;

string[] parts = line.Split(',');
if (parts.Length < 9) continue;

DlcRequirement dlcRequirement = ParseDlcRequirement(parts[0]);
string area = parts[1];

BossRevive boss = new BossRevive
{
DlcRequirement = dlcRequirement,
Area = area,
BossName = parts[2],
BlockId = int.Parse(parts[3], CultureInfo.InvariantCulture),
FirstEncounterFlags = ParseBossFlags(parts[4]),
BossFlags = ParseBossFlags(parts[5]),
BonfireId = int.Parse(parts[6], CultureInfo.InvariantCulture),
Coords = ParseBossCoords(parts[7]),
Angle = string.IsNullOrWhiteSpace(parts[8])
? 0f
: float.Parse(parts[8], CultureInfo.InvariantCulture),
FirstEncounterItemId = parts.Length > 9 && int.TryParse(parts[9], NumberStyles.Integer,
CultureInfo.InvariantCulture, out int firstEncounterItemId)
? firstEncounterItemId
: null
};

if (!bossRevives.ContainsKey(area))
{
bossRevives[area] = new List<BossRevive>();
}

bossRevives[area].Add(boss);
}

return bossRevives;
}

// Each entry is "eventId" (implies clear to OFF) or "eventId:1" (set ON) / "eventId:0" (set OFF, explicit)
private static List<BossFlag> ParseBossFlags(string flagData)
{
var flags = new List<BossFlag>();
if (string.IsNullOrWhiteSpace(flagData)) return flags;

foreach (var part in flagData.Split('|'))
{
if (string.IsNullOrWhiteSpace(part)) continue;

var pieces = part.Split(':');
if (int.TryParse(pieces[0], NumberStyles.Integer, CultureInfo.InvariantCulture, out int id))
{
bool value = pieces.Length > 1 && pieces[1] == "1";
flags.Add(new BossFlag { EventId = id, Value = value });
}
}

return flags;
}

private static Vector3? ParseBossCoords(string coordData)
{
if (string.IsNullOrWhiteSpace(coordData)) return null;

string[] parts = coordData.Split('|');
return new Vector3(
float.Parse(parts[0], CultureInfo.InvariantCulture),
float.Parse(parts[1], CultureInfo.InvariantCulture),
float.Parse(parts[2], CultureInfo.InvariantCulture)
);
}

public static List<Item> GetItemList(string listName)
{
List<Item> items = new List<Item>();
Expand Down
Loading