diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a4ba660..38db77f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -21,6 +21,19 @@ only understand it through code archaeology. * [`Condition`](#condition) * [`Initialize`](#initialize) * [`events.yaml`](#events-yaml) + * [Editing Expressions](#editing-expressions) + * [`Replace`](#replace-1) + * [`Set`](#set-1) + * [`Arguments`](#arguments) + * [`AndAlso`](#andalso) + * [`OrElse`](#orelse) + * [`ExistingStates`](#existingstates) + * [`EditCommands`](#editcommands) + * [`Match`](#match-1) + * [`Arguments`](#arguments-1) + * [`Remove`](#remove-1) + * [`EditConditions`](#editConditions) + * [`Match`](#match-2) ## Data Files @@ -321,3 +334,240 @@ Initialize: This file tracks events that are managed and modified by the enemy randomizer. Only Matt really understands it, althought he `NewEvents` and `ExistingEvents` fields are the same as for `itemevents.yaml`. + +## `ezstate.yaml` + +This file tracks edits to the game's ESD files, which control NPC dialogs and +menus. It's organized by ESD filename, which encodes both the map and NPC that +each file refers to. + +### `ExistingStates` + +This group contains edits that apply to states that already exist in the vanilla +game. Each state is identified by its `Group` and `State`. If you decompile an +ESD file using [soulstruct], you'll see a bunch of state groups that look like +this: + +[soulstruct]: https://github.com/Grimrukh/soulstruct/ + +```python +def t400230_x14(): + """State 0""" + while True: + """State 1""" + call = t400230_x18() + assert not GetEventStatus(1221) + """State 2""" + call = t400230_x19() + assert GetEventStatus(1221) == 1 + """Unused""" + """State 3""" + return 0 +``` + +The `Group` is the number after the `_x` in the function name (in this case 14), +and the `State` is the number after `"""State `. Each state can contain several +commands, which are actions performed in sequence, followed by several +conditions, which are boolean expressions that cause the state machine to +transition to a new state if they evaluate to true. + +Each state edit can also have an `If` field, which works just like [conditional +edits for events]. + +[conditional edits for events]: #conditional-events + +Both commands and conditions can be edited; each one has its own field which +takes its own kind of edit map. These are called `EditCommands` and +`EditConditions`, respectively. + +#### Editing Expressions + +An improtant difference between ESD and EMEVD is that ESD commands and +conditions are more like a normal programming language, with a syntax tree of +complex nested expressions. These appear both in the conditions' boolean +expressions and in the arguments to commands, which can be either booleans or +numbers. + +In order to edit these easily and consistently, `ezstate.yaml` has a common set +of expression edits that can be applied in multiple contexts. Each of these acts +on an expression that's already been matched (for example, the condition under +`EditConditions` or a command argument). + +##### `Replace` + +This takes a map from subexpressions to replacements. It traverses the original +expression and replaces the first occurrence of each subexpression with its +replacement, which can be an arbitrary ESD expression. For example: + +```yaml +EditConditions: +- Match: {Target: 12} + Replace: {73301140: 74000800, 73301150: 74000800, 73301160: 74000800, 73301170: 74000800} +``` + +##### `Set` + +This replaces the entire expression with a single replacement. For example: + +```yaml +EditConditions: +- Match: {Target: 6} + Set: GetEventStatus(1204) +``` + +##### `Arguments` + +This is a map from argument indexes to nested [expression edits] to make for +those arguments. It only works when matched against a function call; it'll throw +an error otherwise. For example: + +[expression edits]: #editing-expressions + +```yaml +EditCommands: +- Match: {Arguments: [2119, 2120, 2121, 2144, 2145]} + Arguments: {3: {Set: 0}, 4: {Set: 0}} +``` + +##### `AndAlso` + +This takes a single boolean expression and adds it as a condition to the +existing boolean that must also match in order for the expression to evaluate to +true. In other words, it changes the expression to `(original) && new`. It's +useful when you want to add extra constraints for quest progression. For +example: + +```yaml +EditConditions: +- Match: {Target: 16} + AndAlso: GetEventStatus(1365) +``` + +##### `OrElse` + +This takes a single boolean expression and adds it as a condition to the +existing boolean that may match as well in order for the expression to evaluate +to true. In other words, it changes the expression to `(original) || new`. It's +useful when you want to loosen the constraints for quest progression. For +example: + +```yaml +EditConditions: +- Match: {Target: 16} + OrElse: GetEventStatus(1365) +``` + +#### `EditCommands` + +Each of these edits contains two components: the `Match` key, which determines +which command to edit, and the remaining keys which describe how to edit it. For +example: + +```yaml +t350301: +- Group: 8 + State: 5 + If: safequest + EditCommands: + - Match: {Name: AddTalkListData, Arguments: [null, 14020001]} + Remove: true +``` + +[expression editing]: #editing-expressions + +##### `Match` + +The match can be thought of as a pattern that either does or does not match any +given command. Matches match the *first* matching command. + +A match can have two different forms: + +* It can be an ESD command represented as a literal string, in which case it + will match exactly that command invocation. For example: + + ```yaml + - Match: "AddTalkListData(2, 14020001, -1)" + Remove: true + ``` + +* It can be be a map with `Name` and `Arguments` fields. The `Name` is the ESD + command name to match, and the `Arguments` represent a *subset* of arguments + that must match. Null arguments or those past the end of the argument list are + allowed to be anything. Arguments themselves are parsed as ESD expressions. + For example: + + ```yaml + - Match: {Name: AddTalkListData, Arguments: [null, 14020001]} + Remove: true + ``` + +##### `Arguments` + +The `Arguments` field works exactly the same as the one for [editing +expressions] in general. For example: + +[editing expressions]: #editing-expressions + +```yaml +EditCommands: +- Match: {Arguments: [2119, 2120, 2121, 2144, 2145]} + Arguments: {3: {Set: 0}, 4: {Set: 0}} +``` + +##### `Remove` + +If `Remove` is true, the command is removed from the state machine entirely. For +example: + +```yaml +- Match: {Name: AddTalkListData, Arguments: [null, 14020001]} + Remove: true +``` + +#### `EditConditions` + +Each of these edits contains two components: the `Match` key, which determines +which conditional branch to edit, and the remaining keys which describe how to +edit it. For example: + +```yaml +t400220: +- Group: 8 + State: 14 + If: safequest + EditConditions: + - Match: {Target: 16} + AndAlso: GetEventStatus(1365) +``` + +This can contain all the same fields as a general [expression edit]. + +[expression edit]: #editing-expressions + +##### `Match` + +A match can have three different forms: + +* It can be a boolean ESD expression represented as a literal string, in which + case it will match exactly that boolean condition. For example: + + ```yaml + - Match: "GetEventStatus(50006131) == 1 && !GetEventStatus(74000555)" + Set: 1 + ``` + +* It can be be an `Index` field, in which case it will match the condition at + that index in the list of state transitions. For example: + + ```yaml + - Match: {Index: 2} + AndAlso: GetEventStatus(1365) + ``` + +* It can be be a `Target` field, in which case it will match the condition that + transitions to the given state number. For example: + + ```yaml + - Match: {Target: 6} + Set: GetEventStatus(1204) + ``` diff --git a/RandomizerCommon/ArchipelagoForm.cs b/RandomizerCommon/ArchipelagoForm.cs index 1fe3a6b..580f5a0 100644 --- a/RandomizerCommon/ArchipelagoForm.cs +++ b/RandomizerCommon/ArchipelagoForm.cs @@ -251,7 +251,18 @@ private void RandomizeForArchipelago(ArchipelagoSession session) ann.Load(opt); var events = new Events($@"{game.Dir}\Base\ds3-common.emedf.json", darkScriptMode: true); var writer = new PermutationWriter( - game, data, ann, events, game.ParseYaml("itemevents.yaml"), opt); + game, + data, + ann, + events, + ESDDocumentation.DeserializeFromFile( + $@"{game.Dir}\Base\ds3.esd.json", + new ESDDocumentation.DocOptions() { Game = "ds3" } + ), + game.ParseYaml("itemevents.yaml"), + game.ParseYaml("ezstate.yaml"), + opt + ); var permutation = new Permutation(game, data, ann, new Messages(null)); var apLocationsToScopes = ArchipelagoLocations(session, ann, locations); diff --git a/RandomizerCommon/EventConfig.cs b/RandomizerCommon/EventConfig.cs index 3e30e47..4d9efd4 100644 --- a/RandomizerCommon/EventConfig.cs +++ b/RandomizerCommon/EventConfig.cs @@ -176,7 +176,7 @@ public class ExistingEvent : BaseEvent /// /// An edit has two critical components: the Matcher which determines which /// instruction(s) in the event to change, and the other properties which indicate which - /// change(s) to make. Only one change may be made per edit. + /// change(s) to make. /// public class EventEdit { diff --git a/RandomizerCommon/EzstateConfig.cs b/RandomizerCommon/EzstateConfig.cs new file mode 100644 index 0000000..4f45eca --- /dev/null +++ b/RandomizerCommon/EzstateConfig.cs @@ -0,0 +1,490 @@ +using NCalc; +using SoulsFormats; +using SoulsIds; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using static RandomizerCommon.EventConfig; +using static SoulsFormats.ESD; +using static SoulsIds.AST; + +namespace RandomizerCommon +{ + /// + /// This class represents the structure of the `ezstate.yaml` data file, which encodes edits to + /// make for dialogue state machines. + /// + public class EzstateConfig + { + /// + /// A map from ESD identifiers to lists of s. + /// + public Dictionary> ExistingStates { get; set; } = new(); + + /// + /// Edits to make for a single Ezstate state. + /// + public class ExistingState + { + // TODO: Group and state numbers are auto-assigned by the compiler and thus subject to + // high churn between patches. We should ideally find a better way to identify which + // states we're targeting. + /// + /// The index of the group that contains this state. This uses the same indexing scheme + /// as soulstruct. + /// + public uint Group { get; set; } + + /// + /// The index of this state within its group. + /// + public uint State { get; set; } + + /// + /// A boolean expression. This state is only applied if it returns true. + /// + /// + /// + /// This can access any boolean in RandomizerOptions as an identifier. + /// + /// + /// This can be checked using IncludeFor. + /// + public string If { get; set; } + + /// + /// Whether this state should be included given the selected randomizer options. + /// + public bool IncludeFor(RandomizerOptions opt) + { + if (If == null) return true; + var expression = new Expression(If); + expression.EvaluateParameter += delegate (string name, ParameterArgs args) + { + args.Result = opt[name]; + }; + return (bool)expression.Evaluate(); + } + + /// + /// Edits to apply to this state's procedural commands. + /// + public List EditCommands { get; set; } = new(); + + /// + /// Edits to apply to this state's conditional state transitions. + /// + public List EditConditions { get; set; } = new(); + + /// Performs the chosen edits on . + /// The state machine file being edited. + /// + /// The ESD metadata used to decode information about . + /// + /// Throws an exception if no command matches Match. + public void Edit(ESD esd, ESDDocumentation doc) + { + if (!esd.StateGroups.TryGetValue(0x7FFFFFFF - Group, out var group)) + { + throw new Exception($"ESD {esd.Name} doesn't have a state group {Group}"); + } + + if (!group.TryGetValue(State, out var state)) + { + throw new Exception($"ESD {esd.Name} doesn't have a state {Group}.{State}"); + } + + foreach (var edit in EditCommands) + { + edit.Edit(state, doc); + } + foreach (var edit in EditConditions) + { + edit.Edit(state, doc); + } + } + } + + /// A single edit to apply to a comamnd in an existing state. + /// + /// An edit has two critical components: the Matcher which determines which command + /// in the state to change, and the other properties which indicate which change(s) to + /// make. + /// + public class CommandEdit + { + /// The matcher which indicates which command to choose. + /// + /// If this matches multiple commands, only the first will be modified. If it doesn't + /// match any, it will throw an error. + /// + public CommandMatcher Match { get; set; } + + /// Edits to make for arguments of the command, by index. + public Dictionary Arguments { get; set; } = new(); + + /// Removes matching commands entirely. + public bool Remove { get; set; } = false; + + /// Performs the chosen edit on . + /// The command being edited. + /// + /// The ESD metadata used to decode information about . + /// + /// Throws an exception if no command matches Match. + public void Edit(State state, ESDDocumentation doc) + { + if (Arguments.Count > 0 && Remove) + { + throw new Exception("Each CommandEdit may only contain one edit"); + } + + for (var i = 0; i < state.EntryCommands.Count; i++) + { + var command = Command.Disassemble(state.EntryCommands[i], doc); + if (!Match.Match(command, doc)) continue; + + if (Arguments.Count > 0) + { + foreach (var (index, edit) in Arguments) + { + command.Arguments[index] = edit.EditExpression( + command.Arguments[index], + doc, + $"argument {index}" + ); + } + state.EntryCommands[i] = command.Assemble(doc); + return; + } + else if (Remove) + { + state.EntryCommands.RemoveAt(i); + return; + } + } + throw new Exception( + $"Expected CommandEdit {Match} to match a command in:\n" + String.Join( + "\n", + state.EntryCommands + .Select(call => "* " + Command.Disassemble(call, doc).ToString()) + ) + ); + } + } + + /// + /// A matcher which indicates which command to choose for a CommandEdit. + /// + /// + /// This can include multiple matcher conditions, in which case all of them must match in + /// order for the matcher to match. + /// + public class CommandMatcher + { + /// A matcher for the command name. + public string Name { get; set; } + + /// Specific arguments to match. Null arguments match any value. + /// + /// A command with fewer args than listed here will not match, but a command + /// with more will. + /// + public List Arguments { get; set; } = new(); + + /// A literal command to match. + public string Command { get; set; } + + /// + /// Parses a literal string as a command, which is matched exactly. + /// + public static explicit operator CommandMatcher(string command) => + new() { Command = command }; + + public bool Match(Command command, ESDDocumentation doc) => + (Name == null || command.Name == Name) && + MatchArguments(command, doc) && + MatchCommand(command, doc); + + /// + /// Whether 's arguments match . + /// + private bool MatchArguments(Command command, ESDDocumentation doc) + { + if (Arguments.Count > command.Arguments.Count) return false; + for (var i = 0; i < Arguments.Count; i++) + { + var argument = Arguments[i]; + if (argument == null) return true; + if (!Arguments[i].Match(command.Arguments[i], doc)) return false; + } + return true; + } + + /// + /// Whether matches . + /// + private bool MatchCommand(Command command, ESDDocumentation doc) => + Command == null || ESDParser.ParseCommand(Command, doc) == command; + + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append(Name ?? "*"); + sb.Append('('); + sb.Append(String.Join( + ", ", + Arguments + .Select(arg => arg is null ? "*" : arg.ToString()) + .Concat(new List() { "..." }) + )); + sb.Append(')'); + return sb.ToString(); + } + } + + /// + /// An abstract base class for classes that modify an expression. It only contains + /// attributes related to modification; selection is handled by the implementors. + /// + public class ExpressionModifier { + /// + /// Replaces each expression that exactly matches a map key with its corresponding + /// value. If a key matches more than once, only the first one is replaced. + /// + public Dictionary Replace { get; set; } = new(); + + /// Replaces the entire condition with the given expression. + public string Set { get; set; } + + /// Edits to make for arguments of a function expression, by index. + public Dictionary Arguments { get; set; } = new(); + + /// + /// Adds the given expression as an additional condition that must match along with the + /// existing expression in order for the condition to match. + /// + public string AndAlso { get; set; } + + /// + /// Adds the given expression as an alternative condition that may match instead of the + /// existing expression in order for the condition to match. + /// + public string OrElse { get; set; } + + /// Performs the chosen edit on . + /// The expression being edited. + /// + /// The ESD metadata used to decode information about . + /// + /// + /// A string that describes the matched expression. Used for error reporting. + /// + /// + /// The modified expression. This may be the original, or it may be a replacement that + /// should be used in its place. + /// + public Expr EditExpression(Expr expr, ESDDocumentation doc, string matchString) + { + var editTypes = 0; + if (Replace.Count > 0) editTypes++; + if (Set != null) editTypes++; + if (Arguments.Count > 0) editTypes++; + if (AndAlso != null) editTypes++; + if (OrElse != null) editTypes++; + if (editTypes > 1) + { + throw new Exception("Each ExpressionModifier may only contain one edit"); + } + + if (Replace.Count > 0) + { + foreach (var (matcherStr, replacementStr) in Replace) + { + var matcher = ESDParser.ParseExpression(matcherStr, doc); + var replacement = ESDParser.ParseExpression(replacementStr, doc); + var found = false; + expr.Visit(AstVisitor.Pre(sub => + { + if (!found && sub == matcher) + { + found = true; + return replacement; + } + else + { + return null; + } + })); + + if (!found) + { + throw new Exception( + $"No ESD subexpression `{matcherStr}` found in {matchString}" + ); + } + } + } + else if (Set != null) + { + return ESDParser.ParseExpression(Set, doc); + } + else if (Arguments.Count > 0) + { + if (expr is not FunctionCall call) + { + throw new Exception( + $"Expected ESD `{expr}` found in {matchString} to be a function call" + ); + } + + foreach (var (i, edit) in Arguments) + { + call.Args[i] = edit.EditExpression(call.Args[i], doc, $"argument {i}"); + } + } + else if (AndAlso != null) + { + return new BinaryExpr() + { + Op = "&&", + Lhs = expr, + Rhs = ESDParser.ParseExpression(AndAlso, doc), + }; + } + else if (OrElse != null) + { + return new BinaryExpr() + { + Op = "||", + Lhs = expr, + Rhs = ESDParser.ParseExpression(OrElse, doc), + }; + } + + return expr; + } + } + + /// + /// A single edit to apply to a conditional state transition from an existing state. + /// + /// + /// An edit has two critical components: the Matcher which determines which + /// condition in the state to change, and the other properties which indicate which + /// change(s) to make. + /// + public class ConditionEdit : ExpressionModifier + { + /// The matcher which indicates which condition to choose. + /// + /// If this matches multiple conditions, only the first will be modified. If it doesn't + /// match any, it will throw an error. + /// + public ConditionMatcher Match { get; set; } + + /// Performs the chosen edit on . + /// The command being edited. + /// + /// The ESD metadata used to decode information about . + /// + /// Throws an exception if no instruction matches Match. + public void Edit(State state, ESDDocumentation doc) + { + for (var i = 0; i < state.Conditions.Count; i++) + { + var condition = state.Conditions[i]; + if (!Match.Match(condition, i, doc)) continue; + + var expr = DisassembleExpression(condition.Evaluator, doc); + condition.Evaluator = AssembleExpression( + EditExpression(expr, doc, Match.ToString()), + doc + ); + } + } + } + + /// + /// A union type for ways to match a condition that can be passed to + /// . + /// + /// + /// This can include multiple matcher conditions, in which case all of them must match in + /// order for the matcher to match. + /// + public class ConditionMatcher + { + /// The index of the condition in the current state's conditions. + public int? Index { get; set; } + + /// The ID of the state that this condition transitions to. + public long? Target { get; set; } + + /// The literal expression to match against. + public string Expression { get; set; } + + /// + /// Parses a literal string as a condition, which is matched exactly. + /// + public static explicit operator ConditionMatcher(string expression) => + new() { Expression = expression }; + + public bool Match(Condition condition, int index, ESDDocumentation doc) + { + return (Index == null || index == Index) && + (Target == null || condition.TargetState == Target) && + MatchExpression(condition, doc); + } + + /// + /// Whether 's evaluator matches . + /// + private bool MatchExpression(Condition condition, ESDDocumentation doc) => + Expression == null || + ESDParser.ParseExpression(Expression, doc) == + DisassembleExpression(condition.Evaluator, doc); + + public override string ToString() + { + var sb = new StringBuilder(); + sb.Append("Condition"); + if (Index != null) sb.Append($" #{Index}"); + if (Target != null) sb.Append($" ->{Target}"); + return sb.ToString(); + } + } + + /// + /// A union type for ESD expression matchers that match a single argument. + /// + public record ArgumentMatcher + { + /// A literal number passed as an argument. + public record Expression(string Expr) : ArgumentMatcher() + { + public override string ToString() => Expr.ToString(); + } + + /// Allows any argument in this position. + public record Anything() : ArgumentMatcher() + { + public override string ToString() => "*"; + } + + public static explicit operator ArgumentMatcher(string arg) => + arg == null ? new Anything() : new Expression(arg); + + private ArgumentMatcher() { } + + public bool Match(Expr expr, ESDDocumentation doc) => + this switch + { + Expression arg => ESDParser.ParseExpression(arg.Expr, doc) == expr, + Anything => true, + _ => throw new Exception("Unknown ArgumentMatcher type"), + }; + } + } +} diff --git a/RandomizerCommon/GameData.cs b/RandomizerCommon/GameData.cs index 27b9931..0ba7656 100644 --- a/RandomizerCommon/GameData.cs +++ b/RandomizerCommon/GameData.cs @@ -995,12 +995,53 @@ public T ParseYaml(string pathInBase) return Util.ParseYaml($@"{Dir}\Base\{pathInBase}"); } + + + /// + /// Updates Ezstate machines according to . + /// + /// Used to decode . + /// Used to determine which edits to include. + public void UpdateEzstate(EzstateConfig config, ESDDocumentation doc, RandomizerOptions opt) + { + var existingStates = + new Dictionary>(config.ExistingStates); + + foreach (var (map, esds) in Talk) + { + var edited = false; + foreach (var (esdName, esd) in esds) + { + if (!existingStates.Remove(esdName, out var states)) continue; + + foreach (var state in states) + { + if (state.IncludeFor(opt)) + { + state.Edit(esd, doc); + edited = true; + } + } + } + + if (edited) WriteESDs.Add(map); + } + + if (existingStates.Count > 0) + { + throw new Exception( + "One or more ezstate.yaml entries didn't match any ESD files:\n" + + String.Join("\n", existingStates.Keys.Select(k => $"* {k}")) + ); + } + } + /// /// Adds and updates events according to . /// /// - /// This currently only supports EventConfig.NewEvents and - /// EventConfig.ExistingEvents. + /// This currently only supports EventConfig.NewEvents, + /// EventConfig.ExistingEvents, and EventConfig.UpdateEvents. /// /// Used to decode events in . /// Used to determine which events to include. diff --git a/RandomizerCommon/PermutationWriter.cs b/RandomizerCommon/PermutationWriter.cs index 92550dd..a5de060 100644 --- a/RandomizerCommon/PermutationWriter.cs +++ b/RandomizerCommon/PermutationWriter.cs @@ -29,7 +29,9 @@ public class PermutationWriter private LocationData data; private AnnotationData ann; private Events events; + private ESDDocumentation esdDoc; private EventConfig eventConfig; + private EzstateConfig ezstateConfig; private RandomizerOptions opt; private Messages messages; private EldenCoordinator coord; @@ -64,7 +66,9 @@ public PermutationWriter( LocationData data, AnnotationData ann, Events events, + ESDDocumentation esdDoc, EventConfig eventConfig, + EzstateConfig ezstateConfig, RandomizerOptions opt, Messages messages = null, EldenCoordinator coord = null @@ -74,7 +78,9 @@ public PermutationWriter( this.data = data; this.ann = ann; this.events = events; + this.esdDoc = esdDoc; this.eventConfig = eventConfig; + this.ezstateConfig = ezstateConfig; this.opt = opt; this.messages = messages; this.coord = coord; @@ -168,87 +174,6 @@ private void ApplyInitialEdits() "Equip this covenant in place of the conventional requirements to " + "summon dark spirits."; } - - if (opt["safequest"]) - { - // Remove the option to say you haven't met Patches before in the Cathedral. - game - .Talk["m35_00_00_00"]["t350301"] - .StateGroups[0x7FFFFFFF - 8][5] - .EntryCommands - .RemoveAt(1); - game.WriteESDs.Add("m35_00_00_00"); - - // Remove the option to not forgive Patches in Firelink. - game - .Talk["m40_00_00_00"]["t400301"] - .StateGroups[0x7FFFFFFF - 8][8] - .EntryCommands - .RemoveAt(0); - - // Make Patches enquire about Greirat even if you bought the Catarina set lots. - var patchesFirelink = game.Talk["m40_00_00_00"]["t400301"]; - patchesFirelink - .StateGroups[0x7FFFFFFF - 8][1] - .Conditions.Find(c => c.TargetState == 6) - .Evaluator = AST.AssembleExpression(CheckEvent(1204, true)); - - // Make Patches talk about Greirat (and trigger the Horsehoof Ring lot) as long - // as Greirat has been freed at all. - patchesFirelink - .StateGroups[0x7FFFFFFF - 24][7] - .Conditions.Find(c => c.TargetState == 12) - .Evaluator = AST.AssembleExpression(CheckEvent(1200, false)); - - // Make Greirat unable to go to Irithyll until Patches is in Firelink, and thus - // is able to rescue him. This ensures you can't softlock yourself if, for - // example, Greirat's shop has the Tower Key. - var greiratIrithyllCondition = game - .Talk["m40_00_00_00"]["t400220"] - .StateGroups[0x7FFFFFFF - 8][14] - .Conditions.Find(c => c.TargetState == 16); - greiratIrithyllCondition.Evaluator = AST.AssembleExpression(new AST.BinaryExpr - { - Op = "&&", - Lhs = AST.DisassembleExpression(greiratIrithyllCondition.Evaluator), - Rhs = CheckEvent(1365, true), - }); - - // Replace the references to the dark tomes in Irina's ESD with 0s. There aren't - // any items with ID 0, so she'll never take the tomes or anything in their - // place, and thus never enter dark mode. - // - // Doing this manually kinda sucks, but it's not yet clear to me how best to - // generalize it. Once I know a few more types of edits I want to make, I'll - // try putting this in a config file. The in-progress work is in the talk-edit - // branch. - var irinaTalk = game.Talk["m40_00_00_00"]["t400260"]; - var state = irinaTalk.StateGroups[0x7FFFFFFF - 7][16]; - var args = state.EntryCommands[0].Arguments; - for (var i = 3; i <= 4; i++) - { - var expr = (AST.ConstExpr)AST.DisassembleExpression(args[i]); - expr.Value = 0; - args[i] = AST.AssembleExpression(expr); - } - } - - // Replace references to four specific Orbeck spell purchase events with one custom - // event that we set once the player has purchased any seven spells. This ensures - // that players don't have to guess which randomized items to buy in order to - // trigger Orbeck's Slumbering Dragoncrest Ring lot. - var orbeckTalk = game.Talk["m40_00_00_00"]["t400230"]; - var orbeckCondition = orbeckTalk.StateGroups[0x7FFFFFFF - 17][1].Conditions[3]; - var orbeckConditionExpr = AST.DisassembleExpression(orbeckCondition.Evaluator); - orbeckConditionExpr.Visit(AST.AstVisitor.PostAct(expr => - { - if (expr is AST.ConstExpr c && c.Value is int v && v >= 73301100 && v < 73301200) - { - c.Value = 74000800; - } - })); - orbeckCondition.Evaluator = AST.AssembleExpression(orbeckConditionExpr); - game.WriteESDs.Add("m40_00_00_00"); } } @@ -1021,6 +946,8 @@ int eventFlagForLocation(int id, LocationType type) // Events if (eventConfig != null) game.UpdateEvents(eventConfig, events, opt); + // NPC Dialog + if (ezstateConfig != null) game.UpdateEzstate(ezstateConfig, esdDoc, opt); if (game.Sekiro) { diff --git a/RandomizerCommon/Randomizer.cs b/RandomizerCommon/Randomizer.cs index 1fdfce7..e967d5e 100644 --- a/RandomizerCommon/Randomizer.cs +++ b/RandomizerCommon/Randomizer.cs @@ -196,7 +196,7 @@ public void Randomize( notify?.Invoke("Editing game files"); PermutationWriter write = - new PermutationWriter(game, data, anns, events, eventConfig, opt); + new(game, data, anns, events, null, eventConfig, null, opt); write.Write(new Random(seed + 1), perm); if (!opt["norandom_skills"]) { @@ -244,9 +244,14 @@ public void Randomize( notify?.Invoke("Editing game files"); random = new Random(seed + 1); + var esdDoc = ESDDocumentation.DeserializeFromFile( + $@"{game.Dir}\Base\ds3.esd.json", + new ESDDocumentation.DocOptions() { Game = "ds3" } + ); var itemEventConfig = game.ParseYaml("itemevents.yaml"); + var ezstateConfig = game.ParseYaml("ezstate.yaml"); PermutationWriter writer = - new PermutationWriter(game, data, ann, events, itemEventConfig, opt); + new(game, data, ann, events, esdDoc, itemEventConfig, ezstateConfig, opt); writer.Write(random, permutation); random = new Random(seed + 2); // TODO maybe randomize other characters no matter what, only do self for item rando @@ -313,8 +318,18 @@ public void Randomize( notify?.Invoke(messages.Get(editPhase)); random = new Random(seed + 1); - PermutationWriter writer = new PermutationWriter( - game, data, ann, null, itemEventConfig, opt, messages, coord); + PermutationWriter writer = new( + game, + data, + ann, + null, + null, + itemEventConfig, + null, + opt, + messages, + coord + ); permResult = writer.Write(random, perm); if (opt["markareas"]) diff --git a/dist/Base/ds3.esd.json b/dist/Base/ds3.esd.json new file mode 100644 index 0000000..7f6ee49 --- /dev/null +++ b/dist/Base/ds3.esd.json @@ -0,0 +1,6366 @@ +{ + "commands": [ + { + "bank": 1, + "id": 0, + "name": "DebugEvent", + "games_used": ["des", "ds1", "ds1r", "bb", "ds3"], + "args": [ + { + "name": "unk", + "type": "string" + } + ] + }, + { + "bank": 1, + "id": 1, + "name": "TalkToPlayer", + "games": ["ds3", "er", "ac6"], + "games_used": ["ds3", "er", "ac6"], + "args": [ + { + "name": "talkParamRow", + "type": "int", + "namespace": "Talk" + }, + { + "name": "unk", + "type": "int", + "comment": "use -1" + }, + { + "name": "unk", + "type": "int", + "comment": "use -1" + }, + { + "name": "eventFlagId", + "type": "int", + "namespace": "EventFlag", + "comment": "usually 0" + } + ] + }, + { + "bank": 1, + "id": 1, + "name": "TalkToPlayer", + "games": ["sdt"], + "games_used": ["sdt"], + "args": [ + { + "name": "talkParamRow", + "type": "int", + "namespace": "Talk" + }, + { + "name": "unk", + "type": "int", + "comment": "use -1" + }, + { + "name": "unk", + "type": "int", + "comment": "use -1" + }, + { + "name": "unk", + "type": "bool" + }, + { + "name": "unk", + "type": "bool", + "optional": true + } + ] + }, + { + "bank": 1, + "id": 1, + "name": "TalkToPlayer", + "games": ["des", "ds1", "ds1r", "bb"], + "games_used": ["des", "ds1", "ds1r", "bb"], + "args": [ + { + "name": "talkParamRow", + "type": "int", + "namespace": "Talk" + }, + { + "name": "unk", + "type": "int", + "comment": "use -1" + }, + { + "name": "unk", + "type": "int", + "comment": "use -1" + } + ] + }, + { + "bank": 1, + "id": 1, + "name": "TalkToPlayer", + "games": ["nr"], + "games_used": ["nr"], + "args": [ + { + "name": "talkParamRow", + "type": "int", + "namespace": "Talk" + }, + { + "name": "unk", + "type": "int", + "comment": "use -1" + }, + { + "name": "unk", + "type": "int", + "comment": "use -1" + }, + { + "name": "unk", + "type": "bool" + } + ] + }, + { + "bank": 1, + "id": 2, + "name": "InvokeEvent", + "games_used": ["des"], + "args": [ + { + "name": "eventId", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 3, + "name": "StopAttacking", + "games_used": ["des"], + "args": [] + }, + { + "bank": 1, + "id": 4, + "name": "Attack", + "games_used": ["des"], + "args": [] + }, + { + "bank": 1, + "id": 5, + "name": "RemoveMyAggro", + "games_used": ["des", "ds1", "ds1r", "bb", "ds3", "sdt", "er", "ac6", "nr"], + "args": [] + }, + { + "bank": 1, + "id": 6, + "name": "DisplayOneLineHelp", + "games_used": ["des", "ds1", "ds1r", "bb", "ds3"], + "args": [ + { + "name": "actionTextId", + "type": "int", + "namespace": "Action" + } + ] + }, + { + "bank": 1, + "id": 7, + "name": "TurnToFacePlayer", + "games_used": [], + "args": [] + }, + { + "bank": 1, + "id": 8, + "name": "ForceEndTalk", + "games_used": ["des", "ds1", "ds1r", "bb", "ds3", "er", "ac6"], + "args": [ + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 9, + "name": "ClearTalkProgressData", + "games_used": ["des", "ds1", "ds1r", "bb", "ds3", "sdt", "er", "ac6", "nr"], + "args": [] + }, + { + "bank": 1, + "id": 10, + "name": "ShowShopMessage", + "games": ["ds3", "sdt", "er", "ac6"], + "games_used": ["ds3", "sdt", "er"], + "args": [ + { + "name": "optionsType", + "type": "enum", + "enum": "TalkOptionsType" + } + ] + }, + { + "bank": 1, + "id": 10, + "name": "ShowShopMessage", + "games": ["des", "ds1", "ds1r", "bb"], + "games_used": ["des", "ds1", "ds1r", "bb"], + "args": [ + { + "name": "optionsType", + "type": "enum", + "enum": "TalkOptionsType" + }, + { + "name": "unk", + "type": "bool" + }, + { + "name": "unk", + "type": "bool" + } + ] + }, + { + "bank": 1, + "id": 10, + "name": "ShowShopMessage", + "games": ["nr"], + "games_used": ["nr"], + "args": [ + { + "name": "optionsType", + "type": "enum", + "enum": "TalkOptionsType" + } + ] + }, + { + "bank": 1, + "id": 11, + "name": "SetEventFlag", + "deprecated_names": ["SetEventState"], + "games_used": ["des", "ds1", "ds1r", "bb", "ds3", "sdt", "er", "ac6", "nr"], + "args": [ + { + "name": "eventFlagId", + "type": "int", + "namespace": "EventFlag" + }, + { + "name": "newFlagState", + "type": "enum", + "enum": "FlagState" + } + ] + }, + { + "bank": 1, + "id": 12, + "name": "CloseShopMessage", + "games_used": ["des", "ds1", "ds1r", "bb", "ds3", "er"], + "args": [] + }, + { + "bank": 1, + "id": 13, + "name": "OpenCampMenu", + "games_used": ["des"], + "args": [ + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 14, + "name": "CloseCampMenu", + "games_used": ["des"], + "args": [] + }, + { + "bank": 1, + "id": 15, + "name": "ChangeTeamType", + "games_used": [], + "args": [] + }, + { + "bank": 1, + "id": 16, + "name": "SetDefaultTeamType", + "games_used": [], + "args": [] + }, + { + "bank": 1, + "id": 17, + "name": "OpenGenericDialog", + "games_used": ["des", "ds1", "ds1r", "bb", "ds3", "sdt", "er", "ac6", "nr"], + "args": [ + { + "name": "boxType", + "type": "enum", + "enum": "DialogBoxType" + }, + { + "name": "textId", + "type": "int", + "namespace": "Action" + }, + { + "name": "defaultResult", + "type": "enum", + "enum": "DialogResult", + "comment": "May be text id in Nightreign" + }, + { + "name": "boxStyle", + "type": "enum", + "enum": "DialogBoxStyle", + "comment": "May be text id in Nightreign" + }, + { + "name": "unk", + "type": "int", + "comment": "(usually 2)" + } + ] + }, + { + "bank": 1, + "id": 18, + "name": "ForceCloseGenericDialog", + "games_used": ["des", "ds1", "ds1r", "bb", "ds3", "sdt", "er", "ac6", "nr"], + "args": [] + }, + { + "bank": 1, + "id": 19, + "name": "AddTalkListData", + "games": ["ds1", "ds1r", "bb", "ds3", "sdt", "er", "ac6", "nr"], + "games_used": ["ds1", "ds1r", "bb", "ds3", "sdt", "er", "nr"], + "args": [ + { + "name": "slot", + "type": "int" + }, + { + "name": "textId", + "type": "int", + "namespace": "Action" + }, + { + "name": "unk", + "type": "int", + "comment": "use -1" + } + ] + }, + { + "bank": 1, + "id": 19, + "name": "AddTalkListData", + "games": ["des"], + "games_used": ["des"], + "args": [ + { + "name": "slot", + "type": "int" + }, + { + "name": "textId", + "type": "int", + "namespace": "Action" + } + ] + }, + { + "bank": 1, + "id": 20, + "name": "ClearTalkListData", + "games_used": ["des", "ds1", "ds1r", "bb", "ds3", "sdt", "er", "nr"], + "args": [] + }, + { + "bank": 1, + "id": 21, + "name": "RequestMoviePlayback", + "games_used": ["ac6"], + "args": [ + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 22, + "name": "OpenRegularShop", + "games_used": ["des", "ds1", "ds1r", "bb", "ds3", "sdt", "er", "nr"], + "args": [ + { + "name": "StartShopLineupParamRow", + "type": "int", + "namespace": "Shop" + }, + { + "name": "EndShopLineupParamRow", + "type": "int", + "namespace": "Shop" + } + ] + }, + { + "bank": 1, + "id": 23, + "name": "OpenRepairShop", + "games_used": ["des", "ds1", "ds1r", "bb", "ds3"], + "args": [] + }, + { + "bank": 1, + "id": 24, + "name": "OpenEnhanceShop", + "games_used": ["des", "ds1", "ds1r", "bb", "ds3", "er", "nr"], + "args": [ + { + "name": "type", + "type": "enum", + "enum": "EnhanceType" + } + ] + }, + { + "bank": 1, + "id": 25, + "name": "OpenHumanityMenu", + "games_used": ["des"], + "args": [ + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 26, + "name": "OpenMagicShop", + "games_used": ["des"], + "args": [ + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 27, + "name": "OpenMiracleShop", + "games_used": ["des"], + "args": [ + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 28, + "name": "OpenMagicEquip", + "games": ["ds1", "ds1r", "bb", "ds3", "sdt", "er", "ac6"], + "games_used": ["ds1", "ds1r", "bb", "ds3", "sdt", "er"], + "args": [ + { + "name": "startId", + "type": "int" + }, + { + "name": "endId", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 28, + "name": "OpenMagicEquip", + "games": ["des"], + "games_used": ["des"], + "args": [] + }, + { + "bank": 1, + "id": 29, + "name": "OpenMiracleEquip", + "games_used": ["des"], + "args": [] + }, + { + "bank": 1, + "id": 30, + "name": "OpenRepository", + "games_used": ["des", "ds1", "ds1r", "bb", "ds3", "sdt", "er"], + "args": [] + }, + { + "bank": 1, + "id": 31, + "name": "OpenSoul", + "games_used": ["des", "ds1", "ds1r", "bb", "ds3", "er", "nr"], + "args": [] + }, + { + "bank": 1, + "id": 32, + "name": "CloseMenu", + "games_used": ["des", "ds1", "ds1r", "bb", "ds3"], + "args": [] + }, + { + "bank": 1, + "id": 33, + "name": "SetEventFlagRange", + "games_used": [], + "args": [ + { + "name": "eventFlagId_A", + "type": "int" + }, + { + "name": "eventFlagId_B", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 34, + "name": "OpenDepository", + "games_used": ["des"], + "args": [] + }, + { + "bank": 1, + "id": 35, + "name": "ClearTalkActionState", + "games_used": ["des", "ds1", "ds1r", "bb", "ds3", "er", "nr"], + "args": [] + }, + { + "bank": 1, + "id": 36, + "name": "ClearTalkDisabledState", + "games_used": ["des", "ds1", "ds1r", "bb", "ds3"], + "args": [] + }, + { + "bank": 1, + "id": 37, + "name": "SetTalkDisableStateMaxDuration", + "games_used": ["bb"], + "args": [ + { + "name": "unk", + "type": "float" + } + ] + }, + { + "bank": 1, + "id": 38, + "name": "SetUpdateDistance", + "games_used": ["des", "ds1", "ds1r", "bb", "ds3", "er", "ac6", "nr"], + "args": [ + { + "name": "distance", + "type": "float" + } + ] + }, + { + "bank": 1, + "id": 39, + "name": "ClearPlayerDamageInfo", + "games_used": ["des", "ds1", "ds1r", "bb", "ds3", "sdt", "er", "nr"], + "args": [] + }, + { + "bank": 1, + "id": 40, + "name": "OfferHumanity", + "games": ["des", "ds1", "ds1r", "bb", "ds3", "sdt", "er", "nr"], + "games_used": ["ds1", "ds1r", "bb", "ds3", "sdt", "er", "nr"], + "args": [] + }, + { + "bank": 1, + "id": 41, + "name": "StartWarpMenuInit", + "games": ["des", "ds1", "ds1r", "bb"], + "games_used": ["ds1", "ds1r", "bb"], + "args": [] + }, + { + "bank": 1, + "id": 41, + "name": "StartWarpMenuInit", + "games": ["ds3", "sdt", "er", "ac6"], + "games_used": ["ds3", "sdt", "ac6"], + "args": [ + { + "name": "bonfireWarpId", + "type": "int", + "comment": "usually uses -1" + } + ] + }, + { + "bank": 1, + "id": 42, + "name": "StartBonfireAnimLoop", + "games": ["ds1", "ds1r", "bb", "ds3", "sdt"], + "games_used": ["ds1", "ds1r", "bb", "ds3", "sdt"], + "args": [] + }, + { + "bank": 1, + "id": 42, + "name": "StartBonfireAnimLoop", + "games": ["er", "nr"], + "games_used": ["er", "nr"], + "args": [ + { + "name": "resetWorld", + "type": "bool" + }, + { + "name": "resetMainCharacter", + "type": "bool" + }, + { + "name": "resetMagicCharges", + "type": "bool" + }, + { + "name": "restoreEstus", + "type": "bool" + }, + { + "name": "animationIdOffset", + "type": "int" + }, + { + "name": "worldResetDelayS", + "type": "float" + } + ] + }, + { + "bank": 1, + "id": 43, + "name": "EndBonfireKindleAnimLoop", + "games": ["des", "ds1", "ds1r", "bb", "ds3", "sdt"], + "games_used": ["ds1", "ds1r", "bb", "ds3", "sdt"], + "args": [] + }, + { + "bank": 1, + "id": 43, + "name": "EndBonfireKindleAnimLoop", + "games": ["er", "ac6", "nr"], + "games_used": ["er", "nr"], + "args": [ + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 46, + "name": "OpenSellShop", + "games_used": ["ds1", "ds1r", "bb", "ds3", "sdt", "er"], + "args": [ + { + "name": "StartShopLineupParamRow", + "type": "int", + "comment": "always -1" + }, + { + "name": "EndShopLineupParamRow", + "type": "int", + "comment": "always -1" + } + ] + }, + { + "bank": 1, + "id": 47, + "name": "ChangePlayerStat", + "deprecated_names": ["ChangePlayerStats"], + "games_used": ["ds1", "ds1r", "bb", "ds3", "sdt", "er", "nr"], + "args": [ + { + "name": "stat", + "type": "enum", + "enum": "PlayerStat" + }, + { + "name": "operation", + "type": "enum", + "enum": "ChangeType" + }, + { + "name": "value", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 48, + "name": "OpenEquipmentChangeOfPurposeShop", + "games_used": ["ds1", "ds1r", "bb", "ds3", "er"], + "args": [] + }, + { + "bank": 1, + "id": 49, + "name": "CombineMenuFlagAndEventFlag", + "games_used": ["ds1", "ds1r", "ds3", "er"], + "args": [ + { + "name": "menuFlagId", + "type": "int" + }, + { + "name": "eventFlagId", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 50, + "name": "RequestSave", + "games_used": ["ds1", "ds1r", "bb", "ds3", "sdt", "er", "nr"], + "args": [ + { + "name": "unk", + "type": "int", + "comment": "use 0" + } + ] + }, + { + "bank": 1, + "id": 51, + "name": "ChangeMotionOffsetID", + "games_used": ["ds1", "ds1r"], + "args": [ + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 52, + "name": "PlayerEquipmentQuantityChange", + "games_used": ["ds1", "ds1r", "bb", "ds3", "sdt", "er", "nr"], + "args": [ + { + "name": "itemCategory", + "type": "enum", + "enum": "ItemType", + "namespace": "ItemType" + }, + { + "name": "itemId", + "type": "int", + "namespace": "Item" + }, + { + "name": "quantityChange", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 53, + "name": "RequestUnlockTrophy", + "games": ["ds1", "ds1r", "bb", "ds3", "sdt", "er"], + "games_used": ["ds1", "ds1r", "bb", "ds3", "sdt"], + "args": [ + { + "name": "achievement", + "type": "enum", + "enum": "Trophy" + } + ] + }, + { + "bank": 1, + "id": 53, + "name": "RequestUnlockTrophy", + "games": ["des", "ac6"], + "args": [ + { + "name": "achievementId", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 54, + "name": "EnterBonfireEventRange", + "games_used": [], + "args": [] + }, + { + "bank": 1, + "id": 55, + "name": "SetAquittalCostMessageTag", + "games_used": ["ds1", "ds1r", "ds3"], + "args": [ + { + "name": "baseAcquittalCost", + "type": "int" + }, + { + "name": "unk", + "type": "int", + "comment": "use 1" + } + ] + }, + { + "bank": 1, + "id": 56, + "name": "SubtractAcquittalCostFromPlayerSouls", + "games_used": ["ds1", "ds1r", "ds3"], + "args": [ + { + "name": "baseAcquittalCost", + "type": "int" + }, + { + "name": "unk", + "type": "int", + "comment": "use 1" + } + ] + }, + { + "bank": 1, + "id": 57, + "name": "ShuffleRNGSeed", + "games_used": ["ds1", "ds1r", "bb", "ds3", "sdt", "er", "nr"], + "args": [ + { + "name": "maxValue", + "type": "int", + "comment": "valid values from 0-100" + } + ] + }, + { + "bank": 1, + "id": 58, + "name": "SetRNGSeed", + "games_used": ["ds1", "ds1r", "bb", "ds3", "sdt", "er", "nr"], + "args": [] + }, + { + "bank": 1, + "id": 59, + "name": "ReplaceTool", + "games_used": ["ds1", "ds1r", "ds3", "er", "nr"], + "args": [ + { + "name": "itemIdToReplace", + "type": "int", + "namespace": "Goods" + }, + { + "name": "newItemId", + "type": "int", + "namespace": "Goods" + }, + { + "name": "newItemQuantity", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 60, + "name": "BreakCovenantPledge", + "games_used": ["ds1", "ds1r"], + "args": [] + }, + { + "bank": 1, + "id": 61, + "name": "PlayerRespawn", + "games_used": ["ds1", "ds1r", "bb", "ds3"], + "args": [] + }, + { + "bank": 1, + "id": 62, + "name": "GiveSpEffectToPlayer", + "games_used": ["ds1", "ds1r", "bb", "ds3", "sdt", "er", "ac6", "nr"], + "args": [ + { + "name": "SpEffectParamRow", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 63, + "name": "ShowTextEffect", + "deprecated_names": ["ShowGrandioseTextPresentation"], + "games_used": ["ds1", "ds1r", "bb", "ds3", "ac6"], + "args": [ + { + "name": "textId", + "type": "int", + "namespace": "TextEffect" + } + ] + }, + { + "bank": 1, + "id": 64, + "name": "AddIzalithRankingPoints", + "games": ["des", "ds1", "ds1r", "ds3", "sdt", "er", "ac6"], + "games_used": ["ds1", "ds1r"], + "args": [] + }, + { + "bank": 1, + "id": 64, + "name": "AddAnnaliseRankingPoints", + "deprecated_names": ["AddIzalithRankingPoints"], + "games": ["bb"], + "games_used": ["bb"], + "args": [ + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 65, + "name": "OpenItemAcquisitionMenu", + "games_used": ["ds1", "ds1r", "bb", "ds3", "sdt"], + "args": [ + { + "name": "itemCategory", + "type": "enum", + "enum": "ItemType", + "namespace": "ItemType" + }, + { + "name": "itemId", + "type": "int", + "namespace": "Item" + }, + { + "name": "numberAcquired", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 66, + "name": "AcquireGesture", + "games": ["des", "ds1", "ds1r", "bb", "ds3", "sdt"], + "games_used": ["ds1", "ds1r", "bb", "ds3", "sdt"], + "args": [ + { + "name": "gestureId", + "type": "int", + "namespace": "Gesture" + } + ] + }, + { + "bank": 1, + "id": 66, + "name": "AcquireGestureOld", + "games": ["er", "ac6"], + "games_used": [], + "comment": "Unused", + "args": [] + }, + { + "bank": 1, + "id": 67, + "name": "ForceCloseMenu", + "games_used": ["ds1", "ds1r", "bb", "ds3", "sdt", "er", "ac6", "nr"], + "args": [] + }, + { + "bank": 1, + "id": 68, + "name": "SetTalkTime", + "games_used": ["ds1", "ds1r", "bb", "ds3", "sdt", "er", "nr"], + "args": [ + { + "name": "time", + "type": "float" + } + ] + }, + { + "bank": 1, + "id": 69, + "name": "CollectJustPyromancyFlame", + "games_used": ["ds1", "ds1r"], + "args": [] + }, + { + "bank": 1, + "id": 70, + "name": "OpenArenaRanking", + "games_used": ["ds1", "ds1r"], + "args": [ + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 71, + "name": "ReportConversationEndToHavokBehavior", + "games": ["des", "ds1", "bb", "ds3", "sdt", "er", "ac6", "nr"], + "games_used": ["bb", "ds3", "sdt", "er", "ac6", "nr"], + "args": [] + }, + { + "bank": 1, + "id": 71, + "deprecated_names": ["ReportConversationEndToHavokBehavior"], + "games": ["ds1r"], + "games_used": ["ds1r"], + "args": [ + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 72, + "name": "SetDungeonIndexNumber", + "games": ["bb"], + "games_used": ["bb"], + "args": [ + { + "name": "Index", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 72, + "deprecated_names": ["SetDungeonIndexNumber"], + "games": ["des", "ds1", "ds1r", "ds3", "sdt"], + "games_used": ["ds1r"], + "args": [] + }, + { + "bank": 1, + "id": 73, + "games": ["bb"], + "games_used": ["bb"], + "args": [ + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 74, + "name": "OpenBloodGemEquipMenu", + "games_used": ["bb"], + "args": [] + }, + { + "bank": 1, + "id": 75, + "name": "OpenCaryllRuneEquipMenu", + "games": ["bb"], + "games_used": ["bb"], + "args": [] + }, + { + "bank": 1, + "id": 75, + "name": "OpenCovenantMenu", + "deprecated_names": ["OpenCaryllRuneEquipMenu"], + "games": ["ds1r"], + "games_used": ["ds1r"], + "args": [] + }, + { + "bank": 1, + "id": 76, + "name": "OpenConversationChoicesMenu", + "games": ["des", "ds1", "ds1r", "bb"], + "games_used": ["ds1r", "bb"], + "args": [] + }, + { + "bank": 1, + "id": 76, + "name": "OpenConversationChoicesMenu", + "games": ["ds3", "sdt", "er", "ac6", "nr"], + "games_used": ["ds3", "sdt", "er", "nr"], + "args": [ + { + "name": "unk", + "type": "int", + "comment": "usually 0" + } + ] + }, + { + "bank": 1, + "id": 77, + "name": "UnusedChaliceAltarPrompt", + "games_used": ["ds1r", "bb"], + "args": [] + }, + { + "bank": 1, + "id": 78, + "name": "OpenIndexedDungeonMenu", + "games_used": ["bb"], + "args": [] + }, + { + "bank": 1, + "id": 79, + "name": "OpenIndexedDungeonMenu2", + "games_used": ["bb"], + "args": [] + }, + { + "bank": 1, + "id": 80, + "name": "StopEventAnimWithoutForcingConversationEnd", + "games_used": ["bb", "ds3", "sdt", "er", "ac6", "nr"], + "args": [ + { + "name": "unk", + "type": "int", + "comment": "use 0" + } + ] + }, + { + "bank": 1, + "id": 81, + "name": "OpenCharaMakeMenu", + "games": ["des", "ds1", "ds1r", "bb", "ds3", "sdt"], + "games_used": ["bb", "ds3"], + "args": [] + }, + { + "bank": 1, + "id": 81, + "name": "OpenCharaMakeMenu", + "games": ["er", "ac6"], + "games_used": ["er"], + "args": [ + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 82, + "name": "OpenChooseQuantityDialog", + "games": ["des", "ds1", "ds1r", "bb"], + "games_used": ["bb"], + "args": [ + { + "name": "itemCategory", + "type": "enum", + "enum": "ItemType", + "namespace": "ItemType" + }, + { + "name": "itemId", + "type": "int", + "namespace": "Item" + }, + { + "name": "textId", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 82, + "name": "OpenChooseQuantityDialog", + "games": ["ds3", "sdt", "er", "ac6"], + "games_used": ["ds3", "er"], + "args": [ + { + "name": "goodsId", + "type": "int" + }, + { + "name": "textId", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 83, + "name": "ClearQuantityValueOfChooseQuantityDialog", + "games_used": ["ds3", "er"], + "args": [] + }, + { + "bank": 1, + "id": 84, + "name": "OpenStartingGiftMenu1", + "games_used": ["bb"], + "args": [] + }, + { + "bank": 1, + "id": 85, + "name": "OpenStartingGiftMenu2", + "games_used": ["bb"], + "args": [] + }, + { + "bank": 1, + "id": 86, + "name": "OpenInsightShop", + "games": ["bb"], + "games_used": ["bb"], + "args": [ + { + "name": "StartShopLineupParamRow", + "type": "int", + "namespace": "Shop" + }, + { + "name": "EndShopLineupParamRow", + "type": "int", + "namespace": "Shop" + } + ] + }, + { + "bank": 1, + "id": 87, + "name": "OpenArcaneHazeExtractorMenu", + "games_used": ["bb"], + "args": [] + }, + { + "bank": 1, + "id": 100, + "name": "SetWorkValue", + "games_used": ["ds3", "sdt", "er", "nr"], + "args": [ + { + "name": "workValueIndex", + "type": "int", + "comment": "must be 0-3" + }, + { + "name": "valueToStore", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 101, + "name": "UpdatePlayerRespawnPoint", + "games_used": ["ds3", "sdt", "er", "nr"], + "args": [] + }, + { + "bank": 1, + "id": 102, + "name": "SetMessageTagValue", + "games_used": ["ds3", "sdt", "er", "nr"], + "args": [ + { + "name": "unk", + "type": "int", + "comment": "usually 0" + }, + { + "name": "cost", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 103, + "name": "TurnCharacterToFaceEntity", + "games": ["des", "ds1", "ds1r", "bb", "ds3", "sdt", "ac6"], + "games_used": ["ds3", "sdt", "ac6"], + "args": [ + { + "name": "animationId", + "type": "int", + "comment": "-1 for no animation" + }, + { + "name": "CharacterEntityId", + "type": "int" + }, + { + "name": "unk", + "type": "int", + "comment": "usually -1" + } + ] + }, + { + "bank": 1, + "id": 103, + "name": "TurnCharacterToFaceEntity", + "games": ["er", "nr"], + "games_used": ["er", "nr"], + "args": [ + { + "name": "animationId", + "type": "int", + "comment": "-1 for no animation" + }, + { + "name": "CharacterEntityId", + "type": "int" + }, + { + "name": "unk", + "type": "int", + "comment": "usually -1" + }, + { + "name": "unk", + "type": "int", + "comment": "usually -1" + } + ] + }, + { + "bank": 1, + "id": 104, + "name": "AwardItemLot", + "deprecated_names": ["GetItemFromItemLot"], + "games_used": ["ds3", "sdt", "er"], + "args": [ + { + "name": "itemLotParamRow", + "type": "int", + "namespace": "Lot" + } + ] + }, + { + "bank": 1, + "id": 105, + "name": "OpenEstusAllotMenu", + "games_used": ["ds3", "er"], + "args": [] + }, + { + "bank": 1, + "id": 106, + "name": "AddRankingPoints", + "games_used": ["ds3"], + "args": [ + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 107, + "name": "OpenHollowLevelUpMenu", + "games_used": ["ds3"], + "args": [] + }, + { + "bank": 1, + "id": 108, + "name": "EstusAllocationUpdate", + "games_used": ["ds3", "sdt", "er", "nr"], + "args": [ + { + "name": "newFlaskCount", + "type": "int" + }, + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 109, + "name": "BonfireActivation", + "games_used": ["ds3", "er", "nr"], + "args": [ + { + "name": "newBonfireLevelTotal", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 110, + "name": "MainBonfireMenuFlag", + "games": ["des", "ds1", "ds1r", "bb", "ds3", "sdt"], + "games_used": ["ds3", "sdt"], + "args": [] + }, + { + "bank": 1, + "id": 110, + "name": "ClearPreviousMenuSelection", + "games": ["er", "nr"], + "games_used": ["er", "nr"], + "args": [] + }, + { + "bank": 1, + "id": 111, + "name": "OpenTranspositionShop", + "games_used": ["ds3", "sdt", "er"], + "args": [ + { + "name": "StartShopLineupParamRow", + "type": "int", + "namespace": "Shop" + }, + { + "name": "EndShopLineupParamRow", + "type": "int", + "namespace": "Shop" + } + ] + }, + { + "bank": 1, + "id": 112, + "name": "SetBonfireMenuData", + "games_used": ["ds3"], + "args": [ + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 113, + "name": "ReallocateAttributes", + "games_used": ["ds3", "er"], + "args": [] + }, + { + "bank": 1, + "id": 114, + "name": "UndeadMatch", + "games_used": ["ds3"], + "args": [] + }, + { + "bank": 1, + "id": 115, + "name": "OpenBonfireMenu", + "games_used": ["sdt"], + "args": [ + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 116, + "games": ["sdt"], + "games_used": ["sdt"], + "args": [] + }, + { + "bank": 1, + "id": 117, + "games": ["sdt"], + "games_used": ["sdt"], + "args": [ + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 117, + "name": "FadeOutAndPassTime", + "games": ["er"], + "games_used": ["er"], + "args": [ + { + "name": "resetWorld", + "type": "bool" + }, + { + "name": "resetMainCharacter", + "type": "bool" + }, + { + "name": "resetMagicCharges", + "type": "bool" + }, + { + "name": "restoreEstus", + "type": "bool" + }, + { + "name": "addHours", + "type": "int" + }, + { + "name": "addMinutes", + "type": "int" + }, + { + "name": "addSeconds", + "type": "int" + }, + { + "name": "blackScreenTime", + "type": "float" + }, + { + "name": "clockStartupDelayS", + "type": "float" + }, + { + "name": "clockMoveTimeS", + "type": "float" + }, + { + "name": "clockFinishDelayS", + "type": "float" + }, + { + "name": "fadeOutTime", + "type": "float" + }, + { + "name": "fadeInTime", + "type": "float" + } + ] + }, + { + "bank": 1, + "id": 117, + "name": "FadeOutAndPassTime", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "float" + }, + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 117, + "games": ["nr"], + "games_used": ["nr"], + "args": [ + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "float" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "float" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "float" + }, + { + "name": "unk", + "type": "float" + } + ] + }, + { + "bank": 1, + "id": 118, + "name": "RunMachine", + "games": ["sdt", "ac6"], + "games_used": ["sdt", "ac6"], + "args": [ + { + "name": "machineId", + "type": "int", + "namespace": "Machine" + } + ] + }, + { + "bank": 1, + "id": 119, + "name": "RunMachine", + "games": ["er", "nr"], + "games_used": ["er", "nr"], + "args": [ + { + "name": "machineId", + "type": "int", + "namespace": "Machine" + } + ] + }, + { + "bank": 1, + "id": 119, + "name": "EndMachine", + "games": ["sdt", "ac6"], + "games_used": ["sdt", "ac6"], + "args": [ + { + "name": "machineId", + "type": "int", + "namespace": "Machine" + } + ] + }, + { + "bank": 1, + "id": 120, + "games": ["sdt"], + "games_used": ["sdt"], + "args": [ + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 120, + "name": "EndMachine", + "games": ["er", "nr"], + "games_used": ["er", "nr"], + "args": [ + { + "name": "machineId", + "type": "int", + "namespace": "Machine" + } + ] + }, + { + "bank": 1, + "id": 120, + "name": "GiveSpEffectToSelf", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "speffectId", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 121, + "name": "EnableCharmHardships", + "games": ["sdt"], + "games_used": ["sdt"], + "args": [ + { + "name": "isEnabled", + "type": "bool" + } + ] + }, + { + "bank": 1, + "id": 121, + "name": "GiveSpEffectToSelf", + "games": ["er", "nr"], + "games_used": ["er", "nr"], + "args": [ + { + "name": "speffectId", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 122, + "name": "OpenScalesShop", + "games": ["sdt"], + "games_used": ["sdt"], + "args": [ + { + "name": "unk" + }, + { + "name": "unk" + }, + { + "name": "unk" + } + ] + }, + { + "bank": 1, + "id": 122, + "name": "SetBuddySpawnPoint", + "games": ["er"], + "games_used": ["er"], + "args": [] + }, + { + "bank": 1, + "id": 123, + "name": "RequestAnimation", + "games": ["er", "ac6", "nr"], + "games_used": ["er", "nr"], + "args": [ + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 123, + "name": "UpgradeProstheticsMenu", + "games": ["sdt"], + "games_used": ["sdt"], + "args": [] + }, + { + "bank": 1, + "id": 124, + "name": "OpenSkillMenu", + "games": ["sdt"], + "games_used": ["sdt"], + "args": [] + }, + { + "bank": 1, + "id": 124, + "name": "GiveSpEffectToEntity", + "games": ["er"], + "games_used": ["er"], + "args": [ + { + "name": "entityId", + "type": "int" + }, + { + "name": "spEffectId", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 125, + "name": "EquipNinjutsu", + "games": ["sdt"], + "games_used": ["sdt"], + "args": [ + { + "name": "unk" + } + ] + }, + { + "bank": 1, + "id": 125, + "name": "SetBuddyEliminateTarget", + "games": ["er"], + "games_used": ["er"], + "args": [ + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk" + } + ] + }, + { + "bank": 1, + "id": 126, + "name": "ShowShopMessageAlt", + "games": ["sdt"], + "games_used": ["sdt"], + "args": [ + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 126, + "name": "CreateAssetfollowingSFX", + "games": ["er"], + "games_used": ["er"], + "args": [ + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 127, + "name": "OpenBonfireSubmenu", + "games": ["sdt"], + "games_used": ["sdt"], + "args": [ + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 127, + "name": "DeleteAssetfollowingSFX", + "games": ["er"], + "games_used": ["er"], + "args": [ + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 128, + "name": "SetMenuDisableTime", + "games": ["sdt"], + "games_used": ["sdt"], + "args": [ + { + "name": "unk", + "type": "float" + } + ] + }, + { + "bank": 1, + "id": 128, + "name": "SpawnDynamicCharacter", + "games": ["er"], + "games_used": ["er"], + "args": [ + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk" + }, + { + "name": "unk" + }, + { + "name": "unk" + }, + { + "name": "unk" + } + ] + }, + { + "bank": 1, + "id": 129, + "games": ["sdt"], + "games_used": ["sdt"], + "args": [] + }, + { + "bank": 1, + "id": 129, + "name": "RemoveDynamicCharacter", + "games": ["er"], + "games_used": ["er"], + "args": [ + { + "name": "unk" + }, + { + "name": "unk", + "type": "float" + } + ] + }, + { + "bank": 1, + "id": 130, + "name": "OpenPhysickMenu", + "games": ["er"], + "games_used": ["er"], + "args": [] + }, + { + "bank": 1, + "id": 130, + "games": ["sdt"], + "games_used": ["sdt"], + "args": [ + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 131, + "name": "AcquireGesture", + "games": ["er"], + "games_used": ["er"], + "args": [ + { + "name": "gestureId", + "type": "int", + "namespace": "Gesture" + } + ] + }, + { + "bank": 1, + "id": 131, + "games": ["sdt"], + "games_used": ["sdt"], + "args": [] + }, + { + "bank": 1, + "id": 132, + "games": ["sdt"], + "games_used": ["sdt"], + "args": [] + }, + { + "bank": 1, + "id": 132, + "name": "ShowClock", + "games": ["er"], + "games_used": ["er"], + "args": [ + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 133, + "name": "HideClock", + "games": ["er"], + "games_used": ["er"], + "args": [ + { + "name": "unk", + "type": "float" + } + ] + }, + { + "bank": 1, + "id": 134, + "name": "SetCurrentTime", + "games": ["er"], + "games_used": ["er"], + "args": [ + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "hours", + "type": "int" + }, + { + "name": "minutes", + "type": "int" + }, + { + "name": "seconds", + "type": "int" + }, + { + "name": "unk", + "type": "float" + }, + { + "name": "unk", + "type": "float" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "float" + }, + { + "name": "unk", + "type": "float" + } + ] + }, + { + "bank": 1, + "id": 135, + "name": "OpenDragonCommunionShop", + "games": ["er"], + "games_used": ["er"], + "args": [ + { + "name": "StartShopLineupParamRow", + "type": "int", + "namespace": "Shop" + }, + { + "name": "EndShopLineupParamRow", + "type": "int", + "namespace": "Shop" + } + ] + }, + { + "bank": 1, + "id": 136, + "name": "OpenBuddyUpgradeMenu", + "games": ["er"], + "games_used": ["er"], + "args": [] + }, + { + "bank": 1, + "id": 137, + "name": "OpenGreatRuneEquipMenu", + "games": ["er"], + "games_used": ["er"], + "args": [] + }, + { + "bank": 1, + "id": 138, + "name": "ChangeCamera", + "games": ["er", "nr"], + "games_used": ["er", "nr"], + "args": [ + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 139, + "name": "SetLookAtEntityForTalk", + "games": ["er", "nr"], + "games_used": ["er", "nr"], + "args": [ + { + "name": "unk", + "type": "int" + }, + { + "name": "entityId", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 140, + "name": "SetCanOpenMap", + "games": ["er", "nr"], + "games_used": ["er", "nr"], + "args": [ + { + "name": "canOpen", + "type": "bool" + } + ] + }, + { + "bank": 1, + "id": 141, + "name": "RecordPlayLog", + "games": ["er"], + "games_used": ["er"], + "args": [ + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 142, + "name": "OpenTailoringShop", + "games": ["er"], + "games_used": ["er"], + "args": [ + { + "name": "StartShopLineupParamRow", + "type": "int", + "namespace": "Shop" + }, + { + "name": "EndShopLineupParamRow", + "type": "int", + "namespace": "Shop" + } + ] + }, + { + "bank": 1, + "id": 143, + "name": "OpenAshOfWarShop", + "games": ["er"], + "games_used": ["er"], + "args": [ + { + "name": "StartShopLineupParamRow", + "type": "int", + "namespace": "Shop" + }, + { + "name": "EndShopLineupParamRow", + "type": "int", + "namespace": "Shop" + } + ] + }, + { + "bank": 1, + "id": 144, + "name": "OpenPuppetShop", + "games": ["er"], + "games_used": ["er"], + "args": [ + { + "name": "StartShopLineupParamRow", + "type": "int", + "namespace": "Shop" + }, + { + "name": "EndShopLineupParamRow", + "type": "int", + "namespace": "Shop" + } + ] + }, + { + "bank": 1, + "id": 146, + "name": "OpenDupeShop", + "games": ["er"], + "games_used": ["er"], + "args": [ + { + "name": "unk", + "type": "bool" + }, + { + "name": "StartShopLineupParamRow", + "type": "int", + "namespace": "Shop" + }, + { + "name": "EndShopLineupParamRow", + "type": "int", + "namespace": "Shop" + } + ] + }, + { + "bank": 1, + "id": 147, + "name": "SetEventFlagValue", + "games": ["er"], + "games_used": ["er"], + "args": [ + { + "name": "baseEventFlagId", + "type": "int" + }, + { + "name": "numberOfUsedFlagBits", + "type": "int" + }, + { + "name": "newValue", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 148, + "name": "OpenChampionsEquipmentShop", + "games": ["er"], + "games_used": ["er"], + "args": [ + { + "name": "StartShopLineupParamRow", + "type": "int", + "namespace": "Shop" + }, + { + "name": "EndShopLineupParamRow", + "type": "int", + "namespace": "Shop" + } + ] + }, + { + "bank": 1, + "id": 149, + "name": "AddTalkListDataAlt", + "games": ["er", "nr"], + "games_used": ["er", "nr"], + "args": [ + { + "name": "slot", + "type": "int" + }, + { + "name": "textId", + "type": "int", + "namespace": "Action" + }, + { + "name": "unk", + "type": "int", + "comment": "use -1" + }, + { + "name": "sortId", + "type": "int" + }, + { + "name": "addIndicator", + "type": "bool" + } + ] + }, + { + "bank": 1, + "id": 150, + "name": "ShowShopMessageAlt", + "games": ["er", "nr"], + "games_used": ["er", "nr"], + "args": [ + { + "name": "optionsType", + "type": "enum", + "enum": "TalkOptionsType" + }, + { + "name": "useSortId", + "type": "bool" + } + ] + }, + { + "bank": 1, + "id": 151, + "name": "OpenArenaMenu", + "games": ["er"], + "games_used": ["er"], + "args": [ + { + "name": "unk" + }, + { + "name": "unk" + }, + { + "name": "unk" + }, + { + "name": "unk" + } + ] + }, + { + "bank": 1, + "id": 151, + "name": "OpenCommenceExpeditionMenu", + "games": ["nr"], + "games_used": ["nr"], + "args": [] + }, + { + "bank": 1, + "id": 152, + "name": "SetScadutreeLevel", + "games": ["er"], + "games_used": ["er"], + "args": [ + { + "name": "level", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 152, + "name": "OpenChangeCharacterMenu", + "games": ["nr"], + "games_used": ["nr"], + "args": [] + }, + { + "bank": 1, + "id": 153, + "name": "SetReveredSpiritAshLevel", + "games": ["er"], + "games_used": ["er"], + "args": [ + { + "name": "level", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 153, + "name": "OpenVisualCodex", + "games": ["nr"], + "games_used": ["nr"], + "args": [] + }, + { + "bank": 1, + "id": 154, + "name": "OpenRelicMenu", + "games": ["nr"], + "games_used": ["nr"], + "args": [] + }, + { + "bank": 1, + "id": 155, + "name": "OpenJarShop", + "games": ["nr"], + "games_used": ["nr"], + "args": [ + { + "name": "StartShopLineupParamRow", + "type": "int", + "namespace": "Shop" + }, + { + "name": "EndShopLineupParamRow", + "type": "int", + "namespace": "Shop" + } + ] + }, + { + "bank": 1, + "id": 156, + "games": ["nr"], + "games_used": ["nr"], + "comment": "Some auxiliary bonfire effect", + "args": [] + }, + { + "bank": 1, + "id": 157, + "name": "OpenJournal", + "games": ["nr"], + "games_used": ["nr"], + "args": [] + }, + { + "bank": 1, + "id": 158, + "name": "UnlockGarb", + "games": ["nr"], + "games_used": ["nr"], + "args": [ + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 159, + "name": "OpenSparringEquipmentMenu", + "games": ["nr"], + "games_used": ["nr"], + "args": [] + }, + { + "bank": 1, + "id": 160, + "name": "OpenReplicateArmamentMenu", + "games": ["nr"], + "games_used": ["nr"], + "args": [] + }, + { + "bank": 1, + "id": 162, + "name": "AddMurk", + "games": ["nr"], + "games_used": ["nr"], + "args": [ + { + "name": "amount", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 163, + "games": ["nr"], + "games_used": ["nr"], + "comment": "Related to Iron Menial (map marker?). Uses mission data", + "args": [ + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 164, + "games": ["nr"], + "games_used": ["nr"], + "comment": "Uses team session data", + "args": [] + }, + { + "bank": 1, + "id": 166, + "games": ["nr"], + "games_used": ["nr"], + "comment": "Related to roundtable state?", + "args": [ + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 167, + "name": "OpenGarbShop", + "games": ["nr"], + "games_used": ["nr"], + "args": [ + { + "name": "StartShopLineupParamRow", + "type": "int", + "namespace": "Shop" + }, + { + "name": "EndShopLineupParamRow", + "type": "int", + "namespace": "Shop" + } + ] + }, + { + "bank": 1, + "id": 169, + "games": ["nr"], + "games_used": ["nr"], + "comment": "Related to roundtable state?", + "args": [ + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 170, + "name": "OpenLegendaryEnhanceShop", + "games": ["nr"], + "games_used": ["nr"], + "args": [] + }, + { + "bank": 1, + "id": 171, + "games": ["nr"], + "games_used": ["nr"], + "args": [] + }, + { + "bank": 1, + "id": 172, + "games": ["nr"], + "games_used": ["nr"], + "args": [ + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 173, + "name": "AwardItemLotEquipment", + "games": ["nr"], + "games_used": ["nr"], + "args": [ + { + "name": "itemLotParamRow", + "type": "int", + "namespace": "Lot" + } + ] + }, + { + "bank": 1, + "id": 174, + "name": "ShowShopMessageWithTalk", + "games": ["nr"], + "games_used": ["nr"], + "args": [ + { + "name": "unk", + "type": "int", + "comment": "always 0, maybe TalkOptionType" + }, + { + "name": "talkParamRow", + "type": "int", + "namespace": "Talk" + } + ] + }, + { + "bank": 1, + "id": 176, + "name": "OpenSparringSettingsMenu", + "games": ["nr"], + "games_used": ["nr"], + "args": [] + }, + { + "bank": 1, + "id": 178, + "games": ["nr"], + "games_used": ["nr"], + "comment": "Related to roundtable state?", + "args": [ + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 180, + "name": "ConcludeRemembrance", + "games": ["nr"], + "games_used": ["nr"], + "args": [] + }, + { + "bank": 1, + "id": 181, + "games": ["nr"], + "games_used": ["nr"], + "comment": "Warp to revenant encounter in tutorial map? Needs testing", + "args": [] + }, + { + "bank": 1, + "id": 182, + "name": "AddSovereignSigils", + "games": ["nr"], + "games_used": ["nr"], + "args": [ + { + "name": "amount", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 183, + "name": "OpenCatalogShop", + "games": ["nr"], + "games_used": ["nr"], + "comment": "Uses unique currency. Needs further investigation", + "args": [ + { + "name": "StartShopLineupParamRow", + "type": "int", + "namespace": "Shop" + }, + { + "name": "EndShopLineupParamRow", + "type": "int", + "namespace": "Shop" + } + ] + }, + { + "bank": 1, + "id": 184, + "name": "ExchangeAntiques", + "games": ["nr"], + "games_used": ["nr"], + "args": [ + { + "name": "givenItem", + "type": "int", + "namespace": "Antique" + }, + { + "name": "receivedItems", + "type": "int", + "namespace": "Antique" + } + ] + }, + { + "bank": 1, + "id": 205, + "name": "LoadMission", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 206, + "name": "UnloadMission", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 207, + "name": "OpenFreeDialog", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 208, + "name": "CloseFreeDialog", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 209, + "name": "ShowMapHighlight", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 210, + "name": "HideMapHighlight", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 212, + "name": "LoadMissionByID", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "missionId", + "type": "int", + "namespace": "Mission" + } + ] + }, + { + "bank": 1, + "id": 213, + "name": "UnloadMissionByID", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "missionId", + "type": "int", + "namespace": "Mission" + } + ] + }, + { + "bank": 1, + "id": 214, + "name": "StartEvent", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "eventSlot", + "type": "int" + }, + { + "name": "eventId", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 215, + "name": "StartCommonEvent", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "eventSlot", + "type": "int" + }, + { + "name": "eventId", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 216, + "name": "RunParallelMachine", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "machineId", + "type": "int", + "namespace": "Machine" + } + ] + }, + { + "bank": 1, + "id": 217, + "name": "EndParallelMachine", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "machineId", + "type": "int", + "namespace": "Machine" + } + ] + }, + { + "bank": 1, + "id": 218, + "name": "StartMission", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [] + }, + { + "bank": 1, + "id": 219, + "name": "EndMission", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [] + }, + { + "bank": 1, + "id": 220, + "name": "ReturnFromMission", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [] + }, + { + "bank": 1, + "id": 221, + "name": "SetMissionFlag", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "missionId", + "type": "int", + "namespace": "Mission" + }, + { + "name": "flag", + "type": "enum", + "enum": "MissionFlag" + }, + { + "name": "flagStatus", + "type": "enum", + "enum": "FlagState" + } + ] + }, + { + "bank": 1, + "id": 222, + "name": "SendMail", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "mailId", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 224, + "name": "PlayBGM", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 225, + "name": "EndMissionWithResult", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "result", + "type": "int" + }, + { + "name": "debriefingId", + "type": "int" + }, + { + "name": "textId", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 226, + "name": "ShowTutorialMessage", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "tutorialId", + "type": "int", + "namespace": "Tutorial" + } + ] + }, + { + "bank": 1, + "id": 227, + "name": "StartTalkForTopMenu", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 228, + "name": "EndTalkForTopMenu", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [] + }, + { + "bank": 1, + "id": 229, + "name": "HideTextEffect", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "textId", + "type": "int", + "namespace": "TextEffect" + } + ] + }, + { + "bank": 1, + "id": 230, + "name": "PreventPlayerMovement", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "prevent", + "type": "bool" + } + ] + }, + { + "bank": 1, + "id": 234, + "name": "ShowGenericLogNotification", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "textId", + "type": "int", + "namespace": "Action" + } + ] + }, + { + "bank": 1, + "id": 235, + "name": "OpenMail", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "mailId", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 236, + "name": "SetMessageVariationID", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 237, + "name": "AddArchive", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "archiveId", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 238, + "name": "PlaySE", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 239, + "name": "ResupplyPlayer", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [] + }, + { + "bank": 1, + "id": 240, + "name": "EnableAmmoAndRepairCosts", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "costsEnabled", + "type": "bool" + } + ] + }, + { + "bank": 1, + "id": 241, + "name": "ShowTextEffectWithCounter", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "textId", + "type": "int", + "namespace": "TextEffect" + }, + { + "name": "value", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 242, + "name": "ShowCharacterInfoOverlay", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 243, + "name": "HideCharacterInfoOverlay", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 244, + "name": "SetSoundState", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 245, + "name": "HideTutorialMessage", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 246, + "name": "PlayCutsceneAndWarpPlayer", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 247, + "name": "HideAllTutorialMessages", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [] + }, + { + "bank": 1, + "id": 248, + "name": "PlayEndCredits", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 249, + "name": "RunHacking", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [] + }, + { + "bank": 1, + "id": 250, + "name": "GiveItemDirectly", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "itemCategory", + "type": "enum", + "enum": "ItemType", + "namespace": "ItemType" + }, + { + "name": "itemId", + "type": "int", + "namespace": "Item" + }, + { + "name": "quantity", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 251, + "name": "ResetHackingDurability", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [] + }, + { + "bank": 1, + "id": 252, + "name": "UnlockOSTuning", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [] + }, + { + "bank": 1, + "id": 253, + "name": "DisplayResultsAndForceSortie", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "missionId", + "type": "int", + "namespace": "Mission" + } + ] + }, + { + "bank": 1, + "id": 254, + "name": "DisplayResultsAndIncrementGameCycle", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [] + }, + { + "bank": 1, + "id": 255, + "name": "StopMovieLoop", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [] + }, + { + "bank": 1, + "id": 256, + "name": "MuteGenericCOM", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "unk", + "type": "int" + } + ] + }, + { + "bank": 1, + "id": 259, + "name": "UnlockDecal", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "decalId", + "type": "int" + } + ] + } + ], + "functions": [ + { + "id": 0, + "name": "GetWhetherEnemiesAreNearby", + "games": ["des", "ds1", "bb", "ds3", "sdt", "er", "ac6"], + "games_used": ["des", "er"], + "args": [ + { + "name": "unk" + } + ], + "return_value": { + "name": "enemiesAreNearby", + "type": "bool" + }, + "binary_return": true + }, + { + "id": 0, + "deprecated_names": ["GetWhetherEnemiesAreNearby"], + "games": ["ds1r"], + "games_used": ["ds1r"], + "args": [ + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + } + ], + "return_value": { + "type": "bool" + }, + "binary_return": true + }, + { + "id": 1, + "name": "GetDistanceToPlayer", + "games_used": ["des", "ds1", "ds1r", "bb", "ds3", "sdt", "er", "ac6", "nr"], + "args": [], + "return_value": { + "name": "horizontalDistance", + "type": "float" + } + }, + { + "id": 2, + "name": "HasTalkEnded", + "games_used": ["des", "ds1", "ds1r", "bb", "ds3"], + "args": [], + "binary_return": true + }, + { + "id": 3, + "name": "CheckSelfDeath", + "games_used": ["des", "ds1", "ds1r", "bb", "ds3", "sdt", "er", "ac6", "nr"], + "args": [], + "return_value": { + "name": "selfIsDead", + "type": "bool" + }, + "binary_return": true + }, + { + "id": 4, + "name": "IsPlayerTalkingToMe", + "games_used": ["des", "ds1", "ds1r", "bb", "ds3"], + "args": [] + }, + { + "id": 5, + "name": "IsAttackedBySomeone", + "games_used": ["des", "ds1", "ds1r", "bb", "ds3", "sdt", "er", "nr"], + "args": [], + "return_value": { + "name": "attacked", + "type": "bool" + }, + "binary_return": true + }, + { + "id": 6, + "name": "GetSelfHP", + "games_used": ["des", "ds1", "ds1r", "bb", "ds3", "sdt", "er", "ac6"], + "args": [], + "return_value": { + "name": "selfHPValue", + "type": "int" + } + }, + { + "id": 7, + "name": "GetDistanceFromEnemy", + "games_used": [], + "args": [], + "return_value": { + "name": "horizontalDistance", + "type": "float" + } + }, + { + "id": 8, + "name": "GetRelativeAngleBetweenPlayerAndSelf", + "games_used": ["des", "ds1", "ds1r", "bb", "ds3", "er"], + "args": [], + "return_value": { + "name": "angleInDegrees", + "type": "float" + } + }, + { + "id": 9, + "name": "IsPlayerAttacking", + "games_used": ["des", "ds1", "ds1r", "bb", "ds3", "sdt", "er", "ac6", "nr"], + "args": [], + "return_value": { + "name": "playerIsAttacking", + "type": "bool" + }, + "binary_return": true + }, + { + "id": 10, + "name": "GetRelativeAngleBetweenSelfAndPlayer", + "games_used": ["er", "nr"], + "args": [], + "return_value": { + "name": "angleInDegrees", + "type": "float" + } + }, + { + "id": 11, + "name": "IsTalkInProgress", + "games_used": ["sdt"], + "args": [], + "return_value": { + "name": "talkIsInProgress", + "type": "bool" + } + }, + { + "id": 12, + "name": "GetTalkInterruptReason", + "games_used": ["sdt", "er", "nr"], + "args": [] + }, + { + "id": 13, + "name": "GetShopCondition", + "games_used": ["des", "ds3"], + "args": [], + "return_value": { + "name": "unk", + "type": "int" + } + }, + { + "id": 14, + "name": "GetOneLineHelpStatus", + "games_used": ["des", "ds1", "ds1r", "bb", "ds3", "sdt", "er", "ac6", "nr"], + "args": [], + "return_value": { + "type": "bool" + }, + "binary_return": true + }, + { + "id": 15, + "name": "GetEventFlag", + "deprecated_names": ["GetEventStatus"], + "games_used": ["des", "ds1", "ds1r", "bb", "ds3", "sdt", "er", "ac6", "nr"], + "args": [ + { + "name": "eventFlagId", + "type": "int", + "namespace": "EventFlag" + } + ], + "return_value": { + "name": "flagStatus", + "type": "enum", + "enum": "FlagState" + }, + "binary_return": true + }, + { + "id": 16, + "name": "DoesPlayerHaveItem", + "deprecated_names": ["IsEquipmentIDObtained"], + "games_used": ["des", "ds1", "ds1r", "ds3", "er", "nr"], + "args": [ + { + "name": "itemCategory", + "type": "enum", + "enum": "ItemType", + "namespace": "ItemType" + }, + { + "name": "itemId", + "type": "int", + "namespace": "Item" + } + ], + "return_value": { + "name": "isObtained", + "type": "bool" + }, + "binary_return": true + }, + { + "id": 17, + "name": "DoesPlayerHaveItemEquipped", + "deprecated_names": ["IsEquipmentIDEquipped"], + "games_used": ["des", "ds1", "ds1r", "bb", "ds3", "er"], + "args": [ + { + "name": "itemCategory", + "type": "enum", + "enum": "ItemType", + "namespace": "ItemType" + }, + { + "name": "itemId", + "type": "int", + "namespace": "Item" + } + ], + "return_value": { + "name": "isEquipped", + "type": "bool" + }, + "binary_return": true + }, + { + "id": 18, + "name": "IsFightingAlone", + "games_used": ["bb", "ac6"], + "args": [], + "binary_return": true + }, + { + "id": 19, + "name": "IsClientPlayer", + "games_used": ["des", "ds1", "ds1r", "bb", "ds3", "sdt", "er", "ac6", "nr"], + "args": [], + "return_value": { + "name": "playerIsNotInOwnWorld", + "type": "bool" + }, + "binary_return": true + }, + { + "id": 20, + "name": "IsCampMenuOpen", + "games_used": ["des"], + "args": [], + "binary_return": true + }, + { + "id": 21, + "name": "IsGenericDialogOpen", + "games_used": ["ds1", "ds1r", "bb", "ds3"], + "args": [], + "return_value": { + "name": "genericDialogIsOpen", + "type": "bool" + }, + "binary_return": true + }, + { + "id": 22, + "name": "GetGenericDialogButtonResult", + "games_used": ["des", "ds1", "ds1r", "bb", "ds3", "sdt", "er", "ac6", "nr"], + "args": [], + "return_value": { + "name": "dialogResult", + "type": "enum", + "enum": "DialogResult" + } + }, + { + "id": 23, + "name": "GetTalkListEntryResult", + "games_used": ["des", "ds1", "ds1r", "bb", "ds3", "sdt", "er", "nr"], + "args": [], + "return_value": { + "name": "chosenTalkListSlot", + "type": "int" + } + }, + { + "id": 24, + "name": "IsMoviePlaying", + "games_used": ["ac6"], + "args": [] + }, + { + "id": 25, + "name": "IsMenuOpen", + "games_used": ["des", "ds1", "ds1r", "bb", "ds3", "sdt", "er", "nr"], + "args": [ + { + "name": "menu", + "type": "enum", + "enum": "MenuType" + } + ], + "return_value": { + "name": "menuIsOpen", + "type": "bool" + }, + "binary_return": true + }, + { + "id": 26, + "name": "IsCharacterDisabled", + "games_used": ["des", "ds1", "ds1r", "bb", "ds3", "sdt", "er", "ac6", "nr"], + "args": [], + "return_value": { + "name": "selfIsHidden", + "type": "bool" + }, + "binary_return": true + }, + { + "id": 27, + "name": "IsPlayerDead", + "games_used": ["des", "ds1", "ds1r", "bb", "ds3", "sdt", "er", "ac6", "nr"], + "args": [], + "return_value": { + "name": "playerIsDead", + "type": "bool" + }, + "binary_return": true + }, + { + "id": 28, + "name": "DidYouDoSomethingInTheMenu", + "games_used": ["des", "ds1", "ds1r", "ds3", "er", "nr"], + "args": [ + { + "name": "menu", + "type": "enum", + "enum": "MenuType" + } + ], + "return_value": { + "name": "didSomething", + "type": "bool" + }, + "binary_return": true + }, + { + "id": 29, + "name": "GetStatus", + "games_used": ["des", "ds1", "ds1r", "bb", "ds3", "sdt", "nr"], + "args": [ + { + "name": "stat", + "type": "enum", + "enum": "PlayerStat" + } + ], + "return_value": { + "name": "statValue", + "type": "int" + } + }, + { + "id": 30, + "name": "IsPlayerMovingACertainDistance", + "games_used": ["des", "ds1", "ds1r", "sdt"], + "args": [ + { + "name": "unk", + "type": "float" + } + ], + "return_value": { + "type": "bool" + }, + "binary_return": true + }, + { + "id": 31, + "name": "IsTalkingToSomeoneElse", + "games_used": ["des", "ds1", "ds1r", "bb", "ds3", "sdt", "ac6"], + "args": [], + "return_value": { + "name": "playerIsTalkingToSomeoneElse", + "type": "bool" + }, + "binary_return": true + }, + { + "id": 32, + "name": "HasDisableTalkPeriodElapsed", + "games_used": ["des", "ds1", "ds1r", "bb", "ds3"], + "args": [], + "return_value": { + "name": "periodHasElapsed", + "type": "bool" + }, + "binary_return": true + }, + { + "id": 33, + "name": "HasPlayerBeenAttacked", + "games_used": ["des", "ds1", "ds1r", "bb", "ds3", "sdt", "er"], + "args": [], + "return_value": { + "name": "playerAttacked", + "type": "bool" + }, + "binary_return": true + }, + { + "id": 34, + "name": "GetPlayerYDistance", + "games_used": ["des", "ds1", "ds1r", "bb", "ds3", "sdt", "er", "nr"], + "args": [], + "return_value": { + "name": "verticalDistance", + "type": "float" + } + }, + { + "id": 35, + "name": "GetPlayerChrType", + "games_used": ["des", "ds1", "ds1r", "bb", "ds3"], + "args": [], + "return_value": { + "name": "playerChrType", + "type": "enum", + "enum": "ChrType" + } + }, + { + "id": 36, + "name": "CanIGoToNextTalkBlock", + "games_used": ["des"], + "args": [], + "return_value": { + "type": "bool" + }, + "binary_return": true + }, + { + "id": 37, + "name": "CompareBonfireState", + "games_used": ["ds1", "ds1r", "bb", "ds3", "sdt", "er", "nr"], + "args": [ + { + "name": "unk", + "type": "int" + } + ], + "return_value": { + "name": "comparisonResult", + "type": "bool" + }, + "binary_return": true + }, + { + "id": 38, + "name": "CompareBonfireLevel", + "games_used": ["ds1", "ds1r", "bb", "ds3", "sdt", "er", "nr"], + "args": [ + { + "name": "comparison", + "type": "enum", + "enum": "CompareType" + }, + { + "name": "level", + "type": "int" + } + ], + "return_value": { + "name": "comparisonResult", + "type": "bool" + }, + "binary_return": true + }, + { + "id": 39, + "name": "CompareParentBonfire", + "games_used": [], + "args": [], + "binary_return": true + }, + { + "id": 40, + "name": "BonfireRegistration0", + "games_used": [], + "args": [] + }, + { + "id": 41, + "name": "BonfireRegistration1", + "games_used": [], + "args": [] + }, + { + "id": 42, + "name": "BonfireRegistration2", + "games_used": [], + "args": [] + }, + { + "id": 43, + "name": "BonfireRegistration3", + "games_used": [], + "args": [] + }, + { + "id": 44, + "name": "BonfireRegistration4", + "games_used": [], + "args": [] + }, + { + "id": 45, + "name": "ComparePlayerStat", + "deprecated_names": ["ComparePlayerStatus"], + "games_used": ["ds1", "ds1r", "bb", "ds3", "sdt", "er", "nr"], + "args": [ + { + "name": "stat", + "type": "enum", + "enum": "PlayerStat" + }, + { + "name": "comparison", + "type": "enum", + "enum": "CompareType" + }, + { + "name": "value", + "type": "int" + } + ], + "return_value": { + "name": "comparisonResult", + "type": "bool" + }, + "binary_return": true + }, + { + "id": 46, + "name": "RelativeAngleBetweenTwoPlayersWithAxis", + "deprecated_names": ["RelativeAngleBetweenTwoPlayers_SpecifyAxis"], + "games_used": ["ds1", "ds1r", "er"], + "args": [ + { + "name": "unk", + "type": "int" + } + ] + }, + { + "id": 47, + "name": "ComparePlayerInventoryNumber", + "games_used": ["ds1", "ds1r", "bb", "ds3", "sdt", "er", "ac6", "nr"], + "args": [ + { + "name": "itemCategory", + "type": "enum", + "enum": "ItemType", + "namespace": "ItemType" + }, + { + "name": "itemId", + "type": "int", + "namespace": "Item" + }, + { + "name": "comparison", + "type": "enum", + "enum": "CompareType" + }, + { + "name": "value", + "type": "int" + }, + { + "name": "checkStorage", + "type": "bool" + } + ], + "return_value": { + "name": "comparisonResult", + "type": "bool" + }, + "binary_return": true + }, + { + "id": 48, + "name": "IsPlayerCurrentWeaponDamaged", + "games_used": ["ds1", "ds1r"], + "args": [], + "binary_return": true + }, + { + "id": 49, + "name": "ComparePlayerAcquittalPrice", + "games_used": ["ds1", "ds1r", "ds3"], + "args": [ + { + "name": "baseAcquittalCost", + "type": "int" + }, + { + "name": "unk", + "type": "int", + "comment": "use 1" + }, + { + "name": "comparison", + "type": "enum", + "enum": "CompareType" + } + ], + "return_value": { + "name": "comparisonResult", + "type": "bool" + }, + "binary_return": true + }, + { + "id": 50, + "name": "CompareRNGValue", + "games_used": ["bb", "ds3", "sdt", "er", "nr"], + "args": [ + { + "name": "comparison", + "type": "enum", + "enum": "CompareType" + }, + { + "name": "value", + "type": "int" + } + ], + "return_value": { + "name": "comparisonResult", + "type": "bool", + "comment": "-1 if not initialized" + } + }, + { + "id": 51, + "name": "WasWarpMenuDestinationSelected", + "games_used": ["ds1", "ds1r", "bb", "ds3", "sdt"], + "args": [], + "return_value": { + "name": "warpDestinationSelected", + "type": "bool" + }, + "binary_return": true + }, + { + "id": 52, + "name": "IsMultiplayerInProgress", + "games_used": ["ds1", "ds1r", "bb", "ds3", "sdt", "er", "nr"], + "args": [], + "return_value": { + "name": "multiplayerIsInProgress", + "type": "bool" + }, + "binary_return": true + }, + { + "id": 53, + "name": "IsTalkExclusiveMenuOpen", + "games_used": ["bb"], + "args": [], + "binary_return": true + }, + { + "id": 54, + "name": "IsRankingMenuOpen", + "games_used": ["ds1", "ds1r"], + "args": [ + { + "name": "unk", + "type": "int" + } + ] + }, + { + "id": 55, + "name": "GetPlayerRemainingHP", + "games_used": ["ds1", "ds1r", "bb", "er", "ac6"], + "args": [] + }, + { + "id": 56, + "name": "CheckActionButtonArea", + "games": ["des", "ds1", "bb", "ds3", "sdt", "er", "ac6", "nr"], + "games_used": ["bb", "ds3", "sdt", "er", "ac6", "nr"], + "args": [ + { + "name": "actionButtonParamRow", + "type": "int", + "namespace": "ActionButton" + } + ], + "return_value": { + "name": "actionButtonPressed", + "type": "bool" + }, + "binary_return": true + }, + { + "id": 56, + "deprecated_names": ["CheckActionButtonArea"], + "games": ["ds1r"], + "games_used": ["ds1r"], + "args": [], + "return_value": { + "type": "bool" + } + }, + { + "id": 57, + "name": "CheckSpecificPersonTalkHasEnded", + "games_used": ["bb", "ds3", "sdt", "er", "ac6", "nr"], + "args": [ + { + "name": "unk", + "type": "int", + "comment": "use 0" + } + ], + "return_value": { + "name": "conversationHasEnded", + "type": "bool" + }, + "binary_return": true + }, + { + "id": 58, + "name": "CheckSpecificPersonGenericDialogIsOpen", + "games": ["des", "ds1", "bb", "ds3", "sdt", "er", "ac6", "nr"], + "games_used": ["bb", "ds3", "sdt", "er", "ac6", "nr"], + "args": [ + { + "name": "unk", + "type": "int" + } + ], + "return_value": { + "name": "dialogIsOpen", + "type": "bool" + }, + "binary_return": true + }, + { + "id": 58, + "deprecated_names": ["CheckSpecificPersonGenericDialogIsOpen"], + "games": ["ds1r"], + "games_used": ["ds1r"], + "args": [], + "return_value": { + "type": "bool" + } + }, + { + "id": 59, + "name": "CheckSpecificPersonMenuIsOpen", + "games": ["des", "ds1", "bb", "ds3", "sdt", "er", "ac6", "nr"], + "games_used": ["bb", "ds3", "sdt", "er", "ac6", "nr"], + "args": [ + { + "name": "unk", + "type": "int", + "comment": "-1 means no menu is open" + }, + { + "name": "unk", + "type": "int", + "comment": "usually 0" + } + ], + "return_value": { + "name": "menuIsOpen", + "type": "bool" + }, + "binary_return": true + }, + { + "id": 59, + "name": "CheckCovenantMenuIsOpen", + "deprecated_names": ["CheckSpecificPersonMenuIsOpen"], + "games": ["ds1r"], + "games_used": ["ds1r"], + "args": [], + "return_value": { + "name": "menuIsOpen", + "type": "bool" + }, + "binary_return": true + }, + { + "id": 60, + "name": "DoesSelfHaveSpEffect", + "games": ["des", "ds1", "bb", "ds3", "sdt", "er", "ac6", "nr"], + "games_used": ["bb", "ds3", "sdt", "er", "ac6", "nr"], + "args": [ + { + "name": "SpEffectParamRow", + "type": "int" + } + ], + "return_value": { + "name": "selfHasSpEffect", + "type": "bool" + }, + "binary_return": true + }, + { + "id": 60, + "deprecated_names": ["DoesSelfHaveSpEffect"], + "games": ["ds1r"], + "games_used": ["ds1r"], + "args": [ + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + } + ], + "return_value": { + "type": "bool" + } + }, + { + "id": 61, + "name": "DoesPlayerHaveSpEffect", + "games": ["des", "ds1", "bb", "ds3", "sdt", "er", "ac6", "nr"], + "games_used": ["bb", "sdt", "er", "ac6", "nr"], + "args": [ + { + "name": "SpEffectParamRow", + "type": "int" + } + ], + "return_value": { + "name": "playerHasSpEffect", + "type": "bool" + }, + "binary_return": true + }, + { + "id": 61, + "deprecated_names": ["DoesPlayerHaveSpEffect"], + "games": ["ds1r"], + "games_used": ["ds1r"], + "args": [] + }, + { + "id": 62, + "name": "GetValueFromNumberSelectDialog", + "games_used": ["bb", "ds3", "er"], + "args": [], + "return_value": { + "name": "quantityChosen", + "type": "int" + } + }, + { + "id": 100, + "name": "GetWorkValue", + "games_used": ["ds3", "sdt", "er", "nr"], + "args": [ + { + "name": "unk", + "type": "int", + "comment": "usually 0" + } + ], + "return_value": { + "name": "storedValue", + "type": "int" + } + }, + { + "id": 101, + "name": "GetEventFlagValue", + "games_used": ["ds3", "er"], + "args": [ + { + "name": "baseEventFlagId", + "type": "int" + }, + { + "name": "value", + "type": "int" + } + ], + "return_value": { + "name": "eventValue", + "type": "int" + } + }, + { + "id": 102, + "name": "GetCurrentStateElapsedFrames", + "games_used": ["ds3", "sdt", "er", "ac6", "nr"], + "args": [], + "return_value": { + "name": "elapsedFrames", + "type": "int" + } + }, + { + "id": 103, + "name": "GetCurrentStateElapsedTime", + "games_used": ["ds3", "sdt", "er", "ac6", "nr"], + "args": [], + "return_value": { + "name": "elapsedTime", + "type": "float" + } + }, + { + "id": 104, + "name": "GetPlayerStat", + "deprecated_names": ["GetPlayerStatus"], + "games_used": ["ds3", "sdt", "er", "nr"], + "args": [ + { + "name": "stat", + "type": "enum", + "enum": "PlayerStat" + } + ], + "return_value": { + "name": "statValue", + "type": "int" + } + }, + { + "id": 105, + "name": "GetLevelUpSoulCost", + "games_used": ["ds3", "nr"], + "args": [ + { + "name": "currentLevel", + "type": "int" + }, + { + "name": "newLevel", + "type": "int" + } + ], + "return_value": { + "name": "levelUpCost", + "type": "int" + } + }, + { + "id": 106, + "name": "GetWhetherChrTurnAnimHasEnded", + "games_used": [], + "args": [], + "return_value": { + "type": "bool" + }, + "binary_return": true + }, + { + "id": 107, + "name": "GetWhetherChrEventAnimHasEnded", + "games_used": ["ds3", "sdt", "er", "nr"], + "args": [ + { + "name": "CharacterEntityId", + "type": "int" + } + ], + "return_value": { + "name": "faceEntityAnimationHasEnded", + "type": "bool" + }, + "binary_return": true + }, + { + "id": 108, + "name": "GetItemHeldNumLimit", + "games_used": ["ds3", "sdt"], + "args": [ + { + "name": "itemCategory", + "type": "enum", + "enum": "ItemType", + "namespace": "ItemType" + }, + { + "name": "itemId", + "type": "int", + "namespace": "Item" + } + ], + "return_value": { + "name": "itemCarryLimit", + "type": "int" + } + }, + { + "id": 109, + "name": "GetEstusAllocation", + "games_used": ["ds3", "sdt", "er", "nr"], + "args": [ + { + "name": "flaskToCheck", + "type": "enum", + "enum": "EstusType" + } + ], + "return_value": { + "name": "numberAllocated", + "type": "int" + } + }, + { + "id": 110, + "name": "GetTotalBonfireLevel", + "games_used": ["ds3", "er", "nr"], + "args": [], + "return_value": { + "name": "totalBonfireLevel", + "type": "int" + } + }, + { + "id": 111, + "name": "GetIsOnline", + "games_used": ["ds3", "er"], + "args": [], + "return_value": { + "name": "online", + "type": "bool" + }, + "binary_return": true + }, + { + "id": 112, + "name": "GetIsNetPenalizedForArena", + "games_used": ["ds3"], + "args": [], + "return_value": { + "name": "netIsPenalized", + "type": "bool" + }, + "binary_return": true + }, + { + "id": 113, + "games": ["sdt"], + "games_used": ["sdt"], + "args": [], + "return_value": { + "type": "float" + } + }, + { + "id": 114, + "games": ["sdt"], + "games_used": ["sdt"], + "args": [ + { + "name": "unk", + "type": "int" + } + ], + "return_value": { + "type": "bool" + } + }, + { + "id": 116, + "games": ["sdt"], + "games_used": ["sdt"], + "args": [ + { + "name": "unk", + "type": "int" + } + ], + "return_value": { + "type": "int" + } + }, + { + "id": 117, + "name": "GetMachineResult", + "games": ["sdt"], + "games_used": ["sdt"], + "args": [], + "return_value": { + "type": "int" + } + }, + { + "id": 118, + "name": "MachineExists", + "games": ["sdt"], + "games_used": ["sdt"], + "args": [ + { + "name": "machineId", + "type": "int", + "namespace": "Machine" + } + ], + "return_value": { + "type": "bool" + }, + "binary_return": true + }, + { + "id": 119, + "games": ["sdt"], + "games_used": ["sdt"], + "args": [], + "return_value": { + "type": "int" + } + }, + { + "id": 120, + "games": ["sdt"], + "games_used": ["sdt"], + "args": [], + "return_value": { + "type": "int" + } + }, + { + "id": 121, + "games": ["sdt"], + "games_used": ["sdt"], + "args": [], + "return_value": { + "type": "int" + } + }, + { + "id": 122, + "games": ["sdt"], + "games_used": ["sdt"], + "args": [], + "return_value": { + "type": "bool" + } + }, + { + "id": 123, + "games": ["sdt"], + "games_used": ["sdt"], + "args": [], + "return_value": { + "type": "bool" + } + }, + { + "id": 124, + "games": ["sdt"], + "games_used": ["sdt"], + "args": [ + { + "name": "unk", + "type": "int" + } + ], + "return_value": { + "type": "bool" + } + }, + { + "id": 125, + "games": ["sdt"], + "games_used": ["sdt"], + "args": [], + "return_value": { + "type": "bool" + } + }, + { + "id": 126, + "games": ["sdt"], + "games_used": ["sdt"], + "args": [], + "return_value": { + "type": "bool" + } + }, + { + "id": 127, + "games": ["sdt"], + "games_used": ["sdt"], + "args": [], + "return_value": { + "type": "bool" + } + }, + { + "id": 128, + "games": ["sdt"], + "games_used": ["sdt"], + "args": [ + { + "name": "unk", + "type": "int" + } + ], + "return_value": { + "type": "bool" + } + }, + { + "id": 200, + "name": "IsTimeOfDayInRange", + "games": ["er"], + "games_used": ["er"], + "args": [ + { + "name": "startingHours", + "type": "int" + }, + { + "name": "startingMinutes", + "type": "int" + }, + { + "name": "startingSeconds", + "type": "int" + }, + { + "name": "endingHours", + "type": "int" + }, + { + "name": "endingMinutes", + "type": "int" + }, + { + "name": "endingSeconds", + "type": "int" + } + ], + "return_value": { + "type": "bool" + }, + "binary_return": true + }, + { + "id": 202, + "name": "GetMachineResult", + "games": ["er", "ac6", "nr"], + "games_used": ["er", "ac6", "nr"], + "args": [], + "return_value": { + "type": "int" + } + }, + { + "id": 203, + "name": "MachineExists", + "games": ["er", "ac6", "nr"], + "games_used": ["er", "ac6", "nr"], + "args": [ + { + "name": "machineId", + "type": "int", + "namespace": "Machine" + } + ], + "return_value": { + "type": "bool" + }, + "binary_return": true + }, + { + "id": 205, + "name": "GetBuddyStoneIsSpecial", + "games": ["er"], + "games_used": ["er"], + "args": [], + "return_value": { + "type": "bool" + }, + "binary_return": true + }, + { + "id": 206, + "name": "GetBuddyStoneSummonedEventFlag", + "games": ["er"], + "games_used": ["er"], + "args": [], + "return_value": { + "type": "int" + } + }, + { + "id": 207, + "name": "GetBuddyStoneEliminateTarget", + "games": ["er"], + "games_used": ["er"], + "args": [], + "return_value": { + "type": "int" + } + }, + { + "id": 208, + "name": "GetBuddyStoneBuddyID", + "games": ["er"], + "games_used": ["er"], + "args": [], + "return_value": { + "type": "int" + } + }, + { + "id": 209, + "name": "GetBuddyStoneSpEffect", + "games": ["er"], + "games_used": ["er"], + "args": [ + { + "name": "unk" + } + ], + "return_value": { + "type": "int" + } + }, + { + "id": 210, + "name": "GetBuddyPlatoonEliminateTarget", + "games": ["er"], + "games_used": ["er"], + "args": [], + "return_value": { + "type": "int" + } + }, + { + "id": 211, + "name": "GetEntityID", + "games": ["er"], + "games_used": ["er"], + "args": [], + "return_value": { + "type": "int" + } + }, + { + "id": 212, + "name": "GetBuddyStoneDopingSpEffect", + "games": ["er"], + "games_used": ["er"], + "args": [], + "return_value": { + "type": "int" + } + }, + { + "id": 213, + "name": "GetIsHost", + "games": ["er"], + "games_used": ["er"], + "args": [], + "return_value": { + "type": "bool" + }, + "binary_return": true + }, + { + "id": 214, + "name": "IsEliminateTargetInBuddyArea", + "games": ["er"], + "games_used": ["er"], + "args": [], + "return_value": { + "type": "bool" + }, + "binary_return": true + }, + { + "id": 215, + "name": "GetBuddyStoneOverwriteActivateRegion", + "games": ["er"], + "games_used": ["er"], + "args": [], + "return_value": { + "type": "int" + } + }, + { + "id": 216, + "name": "GetBuddyStoneActivateRange", + "games": ["er"], + "games_used": ["er"], + "args": [], + "return_value": { + "type": "float" + } + }, + { + "id": 217, + "name": "AreaExists", + "games": ["er"], + "games_used": ["er"], + "args": [ + { + "name": "areaEntityId", + "type": "int" + } + ], + "return_value": { + "type": "bool" + }, + "binary_return": true + }, + { + "id": 218, + "name": "IsEntityInArea", + "games": ["er"], + "games_used": ["er"], + "args": [ + { + "name": "inArea", + "type": "bool" + }, + { + "name": "targetEntityId", + "type": "int" + }, + { + "name": "areaEntityId", + "type": "int" + } + ], + "return_value": { + "type": "bool" + }, + "binary_return": true + }, + { + "id": 219, + "name": "GetMorningHours", + "games": ["er"], + "games_used": ["er"], + "args": [], + "return_value": { + "type": "int" + } + }, + { + "id": 220, + "name": "GetMorningMinutes", + "games": ["er"], + "games_used": ["er"], + "args": [], + "return_value": { + "type": "int" + } + }, + { + "id": 221, + "name": "GetMorningSeconds", + "games": ["er"], + "games_used": ["er"], + "args": [], + "return_value": { + "type": "int" + } + }, + { + "id": 222, + "name": "GetNoonHours", + "games": ["er"], + "games_used": ["er"], + "args": [], + "return_value": { + "type": "int" + } + }, + { + "id": 223, + "name": "GetNoonMinutes", + "games": ["er"], + "games_used": ["er"], + "args": [], + "return_value": { + "type": "int" + } + }, + { + "id": 224, + "name": "GetNoonSeconds", + "games": ["er"], + "games_used": ["er"], + "args": [], + "return_value": { + "type": "int" + } + }, + { + "id": 225, + "name": "GetNightHours", + "games": ["er"], + "games_used": ["er"], + "args": [], + "return_value": { + "type": "int" + } + }, + { + "id": 226, + "name": "GetNightMinutes", + "games": ["er"], + "games_used": ["er"], + "args": [], + "return_value": { + "type": "int" + } + }, + { + "id": 227, + "name": "GetNightSeconds", + "games": ["er"], + "games_used": ["er"], + "args": [], + "return_value": { + "type": "int" + } + }, + { + "id": 228, + "name": "PlayerDiedFromFallInstantly", + "games": ["er", "nr"], + "games_used": ["er", "nr"], + "args": [], + "return_value": { + "type": "bool" + } + }, + { + "id": 229, + "name": "PlayerDiedFromFallDamage", + "games": ["er", "nr"], + "games_used": ["er", "nr"], + "args": [], + "return_value": { + "type": "bool" + } + }, + { + "id": 230, + "name": "PlayerHasTool", + "games": ["er"], + "games_used": ["er"], + "args": [ + { + "name": "unk", + "type": "int" + } + ], + "return_value": { + "type": "bool" + }, + "binary_return": true + }, + { + "id": 231, + "name": "GetRelativeAngleToPlayerWithAxis", + "games": ["er"], + "games_used": ["er"], + "args": [ + { + "name": "unk", + "type": "int" + } + ], + "return_value": { + "type": "float" + } + }, + { + "id": 233, + "name": "IsTimePassFadeOutInProgress", + "games": ["er"], + "games_used": ["er"], + "args": [], + "return_value": { + "type": "bool" + } + }, + { + "id": 234, + "name": "GetIsRealMultiplayer", + "games": ["er"], + "games_used": ["er"], + "args": [], + "return_value": { + "type": "bool" + }, + "binary_return": true + }, + { + "id": 236, + "name": "GetEquipmentSortID", + "games": ["er", "nr"], + "games_used": ["er", "nr"], + "args": [ + { + "name": "itemCategory", + "type": "enum", + "enum": "ItemType", + "namespace": "ItemType" + }, + { + "name": "itemId", + "type": "int", + "namespace": "Item" + } + ], + "return_value": { + "type": "int" + } + }, + { + "id": 237, + "name": "GetScadutreeLevel", + "games": ["er"], + "games_used": ["er"], + "args": [], + "return_value": { + "type": "int" + } + }, + { + "id": 238, + "name": "GetReveredSpiritAshLevel", + "games": ["er"], + "games_used": ["er"], + "args": [], + "return_value": { + "type": "int" + } + }, + { + "id": 239, + "games": ["er"], + "games_used": ["er"], + "args": [], + "return_value": { + "type": "int" + } + }, + { + "id": 300, + "name": "GetMaxRuneLevel", + "games": ["nr"], + "games_used": ["nr"], + "args": [] + }, + { + "id": 301, + "games": ["nr"], + "games_used": ["nr"], + "args": [ + { + "name": "unk", + "type": "int" + } + ], + "return_value": { + "type": "enum", + "enum": "Hero", + "comment": "Speculative based on usage" + } + }, + { + "id": 302, + "games": ["nr"], + "games_used": ["nr"], + "comment": "Used for defeated Nightlord count, but may be part of personal scenarios", + "args": [ + { + "name": "unk", + "type": "int" + } + ] + }, + { + "id": 303, + "name": "GetHeroExpeditionCount", + "games": ["nr"], + "games_used": ["nr"], + "args": [ + { + "type": "enum", + "enum": "Hero" + } + ] + }, + { + "id": 304, + "games": ["nr"], + "games_used": ["nr"], + "comment": "Ids look similar to c1_163. Uses mission data", + "args": [ + { + "name": "unk", + "type": "int" + } + ] + }, + { + "id": 305, + "games": ["nr"], + "games_used": ["nr"], + "comment": "Used with c1_164", + "args": [], + "return_value": { + "type": "bool" + }, + "binary_return": true + }, + { + "id": 308, + "games": ["nr"], + "games_used": ["nr"], + "args": [ + { + "name": "unk", + "type": "int" + } + ] + }, + { + "id": 309, + "name": "GetChrHero", + "games": ["nr"], + "games_used": ["nr"], + "args": [], + "return_value": { + "type": "enum", + "enum": "Hero" + } + }, + { + "id": 310, + "name": "GetHackingDurability", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [], + "return_value": { + "type": "float" + } + }, + { + "id": 310, + "games": ["nr"], + "games_used": ["nr"], + "args": [ + { + "name": "unk", + "type": "int" + } + ] + }, + { + "id": 312, + "name": "GetMapEventFlag", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "unk", + "type": "int" + } + ], + "return_value": { + "name": "flagStatus", + "type": "enum", + "enum": "FlagState" + }, + "binary_return": true + }, + { + "id": 312, + "games": ["nr"], + "games_used": ["nr"], + "args": [] + }, + { + "id": 313, + "name": "GetGimmickEventFlag", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "unk", + "type": "int" + } + ], + "return_value": { + "name": "flagStatus", + "type": "enum", + "enum": "FlagState" + }, + "binary_return": true + }, + { + "id": 314, + "name": "GetMissionFlag", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "missionId", + "type": "int", + "namespace": "Mission" + }, + { + "name": "flag", + "type": "enum", + "enum": "MissionFlag" + } + ], + "return_value": { + "name": "flagStatus", + "type": "enum", + "enum": "FlagState" + }, + "binary_return": true + }, + { + "id": 314, + "name": "CountEventFlags", + "games": ["nr"], + "games_used": ["nr"], + "args": [ + { + "name": "startingFlagId", + "type": "int" + }, + { + "name": "endingFlagId", + "type": "int" + } + ] + }, + { + "id": 315, + "name": "GetMailStatus", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "unk", + "type": "int" + } + ], + "return_value": { + "type": "int" + } + }, + { + "id": 315, + "games": ["nr"], + "games_used": ["nr"], + "args": [ + { + "name": "unk", + "type": "int" + } + ] + }, + { + "id": 316, + "name": "GetMailIDForMission", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "unk", + "type": "int" + }, + { + "name": "unk", + "type": "int" + } + ], + "return_value": { + "type": "int" + } + }, + { + "id": 316, + "games": ["nr"], + "games_used": ["nr"], + "args": [] + }, + { + "id": 317, + "name": "GetCurrentScenarioSection", + "games": ["nr"], + "games_used": ["nr"], + "args": [], + "return_value": { + "type": "enum", + "enum": "Hero" + } + }, + { + "id": 318, + "name": "GetCompanyContributionAmount", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "unk", + "type": "int" + } + ], + "return_value": { + "type": "int" + } + }, + { + "id": 318, + "name": "GetHeroWinCount", + "games": ["nr"], + "games_used": ["nr"], + "args": [ + { + "name": "hero", + "type": "enum", + "enum": "Hero" + } + ] + }, + { + "id": 319, + "name": "DoesPlayerHaveStateInfo", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "unk", + "type": "int" + } + ], + "return_value": { + "type": "bool" + }, + "binary_return": true + }, + { + "id": 319, + "name": "GetRequestGameMode", + "games": ["nr"], + "games_used": ["nr"], + "args": [] + }, + { + "id": 320, + "name": "IsTextEffectDone", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "textId", + "type": "int", + "namespace": "TextEffect" + } + ], + "return_value": { + "type": "bool" + }, + "binary_return": true + }, + { + "id": 320, + "name": "CompareSovereignSigils", + "games": ["nr"], + "games_used": ["nr"], + "args": [ + { + "name": "comparison", + "type": "enum", + "enum": "CompareType" + }, + { + "name": "value", + "type": "int" + } + ], + "return_value": { + "name": "comparisonResult", + "type": "bool" + }, + "binary_return": true + }, + { + "id": 321, + "name": "IsCutscenePlaying", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [], + "return_value": { + "type": "bool" + }, + "binary_return": true + }, + { + "id": 322, + "name": "GetGameCycle", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [], + "return_value": { + "type": "int" + } + }, + { + "id": 324, + "name": "IsEndCreditsPlaying", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [], + "return_value": { + "type": "bool" + }, + "binary_return": true + }, + { + "id": 325, + "name": "IsInHackingStartArea", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [], + "return_value": { + "type": "bool" + }, + "binary_return": true + }, + { + "id": 326, + "name": "IsInHackingArea", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [], + "return_value": { + "type": "bool" + }, + "binary_return": true + }, + { + "id": 327, + "name": "GetCurrentChapter", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [], + "return_value": { + "type": "int" + } + }, + { + "id": 328, + "name": "IsFreeMission", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [], + "return_value": { + "type": "bool" + }, + "binary_return": true + }, + { + "id": 329, + "name": "IsHardcoreMission", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [], + "return_value": { + "type": "bool" + }, + "binary_return": true + }, + { + "id": 331, + "name": "IsArenaComplete", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [ + { + "name": "arenaId", + "type": "int", + "namespace": "Arena" + } + ], + "return_value": { + "type": "bool" + }, + "binary_return": true + }, + { + "id": 332, + "name": "IsHackingComplete", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [], + "return_value": { + "type": "bool" + }, + "binary_return": true + }, + { + "id": 333, + "name": "GetMissionAltType", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [], + "return_value": { + "type": "enum", + "enum": "MissionAltType" + } + }, + { + "id": 334, + "name": "GetACTestEnemySetting", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [], + "return_value": { + "type": "int" + } + }, + { + "id": 335, + "name": "GetACTestAISetting", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [], + "return_value": { + "type": "int" + } + }, + { + "id": 336, + "name": "IsTimePassComplete", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [], + "return_value": { + "type": "bool" + }, + "binary_return": true + }, + { + "id": 337, + "name": "GetMercenaryRank", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [], + "return_value": { + "type": "int" + } + }, + { + "id": 338, + "name": "IsPopupDialogClosed", + "games": ["ac6"], + "games_used": ["ac6"], + "args": [], + "return_value": { + "type": "bool" + }, + "binary_return": true + } + ], + "enums": [ + { + "name": "ChangeType", + "entries": [ + {"value": 0, "name": "Add"}, + {"value": 1, "name": "Subtract"}, + {"value": 2, "name": "Multiply"}, + {"value": 3, "name": "Divide"}, + {"value": 4, "name": "Modulus"}, + {"value": 5, "name": "Set"} + ] + }, + { + "name": "ChrType", + "entries": [ + {"value": 8, "name": "Hollow"} + ] + }, + { + "name": "CompareType", + "entries": [ + {"value": 0, "name": "Equal"}, + {"value": 1, "name": "NotEqual"}, + {"value": 2, "name": "Greater"}, + {"value": 3, "name": "Less"}, + {"value": 4, "name": "GreaterOrEqual"}, + {"value": 5, "name": "LessOrEqual"} + ] + }, + { + "name": "DialogBoxStyle", + "entries": [ + {"value": 0, "name": "OrnateNoOptions"}, + {"value": 1, "name": "DialogOptions"}, + {"value": 2, "name": "OrnateOptions"}, + {"value": 3, "name": "OrnateYesOption"}, + {"value": 4, "name": "Unk"} + ] + }, + { + "name": "DialogBoxType", + "entries": [ + {"value": 1, "name": "CenterMiddleDimScreen1"}, + {"value": 2, "name": "CenterMiddleDimScreen2"}, + {"value": 7, "name": "CenterBottom1"}, + {"value": 8, "name": "CenterBottom2"} + ] + }, + { + "name": "DialogResult", + "entries": [ + {"value": 0, "name": "Cancel"}, + {"value": 1, "name": "Left"}, + {"value": 2, "name": "Right"}, + {"value": 3, "name": "Leave"} + ] + }, + { + "name": "EnhanceType", + "games": ["des", "ds1", "ds1r", "bb", "ds3", "sdt"], + "entries": [ + {"value": 0, "name": "Normal"}, + {"value": 10, "name": "Unk"} + ] + }, + { + "name": "EnhanceType", + "games": ["er", "ac6", "nr"], + "entries": [ + {"value": 0, "name": "UnlimitedRange"}, + {"value": 1, "name": "LimitedRange"} + ] + }, + { + "name": "EstusType", + "entries": [ + {"value": 0, "name": "HP"}, + {"value": 1, "name": "FP"} + ] + }, + { + "name": "FlagState", + "entries": [ + {"value": 0, "name": "Off"}, + {"value": 1, "name": "On"} + ] + }, + { + "name": "ItemType", + "games": ["des", "ds1", "ds1r", "bb", "ds3", "sdt", "er", "nr"], + "entries": [ + {"value": 0, "name": "Weapon"}, + {"value": 1, "name": "Protector"}, + {"value": 2, "name": "Accessory"}, + {"value": 3, "name": "Goods"} + ] + }, + { + "name": "ItemType", + "games": ["ac6"], + "entries": [ + {"value": 0, "name": "Weapon"}, + {"value": 1, "name": "Protector"}, + {"value": 2, "name": "Accessory"}, + {"value": 3, "name": "Goods"}, + {"value": 5, "name": "Generator"}, + {"value": 6, "name": "Booster"}, + {"value": 7, "name": "Fcs"} + ] + }, + { + "name": "MenuType", + "entries": [ + {"value": 11, "name": "Talk"}, + {"value": 12, "name": "Repair"}, + {"value": 13, "name": "Reinforcement"}, + {"value": 23, "name": "LevelUp"}, + {"value": 25, "name": "Attunement"}, + {"value": 26, "name": "Storage"}, + {"value": 30, "name": "CharacterEdit"}, + {"value": 31, "name": "CovenantOffering"}, + {"value": 36, "name": "Warp"}, + {"value": 53, "name": "Unk"}, + {"value": 63, "name": "Bonfire"} + ] + }, + { + "name": "PlayerStat", + "games": ["ds3", "sdt"], + "entries": [ + {"value": 0, "name": "Vigor"}, + {"value": 1, "name": "Attunement"}, + {"value": 2, "name": "Endurance"}, + {"value": 3, "name": "Strength"}, + {"value": 4, "name": "Dexterity"}, + {"value": 5, "name": "Intelligence"}, + {"value": 6, "name": "Faith"}, + {"value": 7, "name": "Luck"}, + {"value": 8, "name": "SoulsCollected"}, + {"value": 9, "name": "TotalGetSouls"}, + {"value": 10, "name": "Humanity"}, + {"value": 11, "name": "CovenantType"}, + {"value": 12, "name": "Gender"}, + {"value": 15, "name": "EquippedCovenantPoints"}, + {"value": 16, "name": "EquippedCovenantLevel"}, + {"value": 17, "name": "BladeOfDarkmoonPoints"}, + {"value": 18, "name": "WarriorOfSunlightPoints"}, + {"value": 19, "name": "MoundMakersPoints"}, + {"value": 20, "name": "SpearsOfTheChurchPoints"}, + {"value": 21, "name": "RosariasFingersPoints"}, + {"value": 22, "name": "WatchdogsOfFarronPoints"}, + {"value": 23, "name": "AldrichFaithfulPoints"}, + {"value": 24, "name": "BladeOfDarkmoonLevel"}, + {"value": 25, "name": "WarriorOfSunlightLevel"}, + {"value": 26, "name": "MoundMakersLevel"}, + {"value": 27, "name": "SpearsOfTheChurchLevel"}, + {"value": 28, "name": "RosariasFingersLevel"}, + {"value": 29, "name": "WatchdogsOfFarronLevel"}, + {"value": 30, "name": "AldrichFaithfulLevel"}, + {"value": 31, "name": "Hollowing"}, + {"value": 32, "name": "HollowingCovenantLevel"}, + {"value": 33, "name": "SoulLevel"}, + {"value": 34, "name": "RemainingYoelLevels"}, + {"value": 35, "name": "WayOfBluePoints"}, + {"value": 36, "name": "WayOfBlueLevel"}, + {"value": 37, "name": "BlueSentinelsPoints"}, + {"value": 38, "name": "BlueSentinelsLevel"} + ] + }, + { + "name": "PlayerStat", + "games": ["er", "ac6", "nr"], + "entries": [ + {"value": 0, "name": "Vigor"}, + {"value": 1, "name": "Mind"}, + {"value": 2, "name": "Endurance"}, + {"value": 3, "name": "Strength"}, + {"value": 4, "name": "Dexterity"}, + {"value": 5, "name": "Intelligence"}, + {"value": 6, "name": "Faith"}, + {"value": 7, "name": "Arcane"}, + {"value": 8, "name": "RunesCollected"}, + {"value": 9, "name": "TotalGetRunes"}, + {"value": 10, "name": "Humanity"}, + {"value": 11, "name": "CovenantType"}, + {"value": 12, "name": "Gender"}, + {"value": 15, "name": "EquippedCovenantPoints"}, + {"value": 16, "name": "EquippedCovenantLevel"}, + {"value": 17, "name": "BladeOfDarkmoonPoints"}, + {"value": 18, "name": "WarriorOfSunlightPoints"}, + {"value": 19, "name": "MoundMakersPoints"}, + {"value": 20, "name": "SpearsOfTheChurchPoints"}, + {"value": 21, "name": "RosariasFingersPoints"}, + {"value": 22, "name": "WatchdogsOfFarronPoints"}, + {"value": 23, "name": "AldrichFaithfulPoints"}, + {"value": 24, "name": "BladeOfDarkmoonLevel"}, + {"value": 25, "name": "WarriorOfSunlightLevel"}, + {"value": 26, "name": "MoundMakersLevel"}, + {"value": 27, "name": "SpearsOfTheChurchLevel"}, + {"value": 28, "name": "RosariasFingersLevel"}, + {"value": 29, "name": "WatchdogsOfFarronLevel"}, + {"value": 30, "name": "AldrichFaithfulLevel"}, + {"value": 31, "name": "Hollowing"}, + {"value": 32, "name": "HollowingCovenantLevel"}, + {"value": 33, "name": "RuneLevel"}, + {"value": 34, "name": "RemainingYoelLevels"}, + {"value": 35, "name": "WayOfBluePoints"}, + {"value": 36, "name": "WayOfBlueLevel"}, + {"value": 37, "name": "BlueSentinelsPoints"}, + {"value": 38, "name": "BlueSentinelsLevel"} + ] + }, + { + "name": "PlayerStat", + "games": ["des", "ds1", "ds1r"], + "entries": [ + {"value": 0, "name": "Vitality"}, + {"value": 1, "name": "Attunement"}, + {"value": 2, "name": "Endurance"}, + {"value": 3, "name": "Strength"}, + {"value": 4, "name": "Dexterity"}, + {"value": 5, "name": "Intelligence"}, + {"value": 6, "name": "Faith"}, + {"value": 8, "name": "SoulsCollected"}, + {"value": 9, "name": "TotalGetSouls"}, + {"value": 10, "name": "Humanity"}, + {"value": 11, "name": "CovenantType"}, + {"value": 12, "name": "Gender"}, + {"value": 13, "name": "SunlightAltarPlayersAssisted"}, + {"value": 14, "name": "ForestHuntersPlayersKilled"}, + {"value": 15, "name": "EquippedCovenantPoints"}, + {"value": 16, "name": "EquippedCovenantLevel"}, + {"value": 17, "name": "WarriorOfSunlightPoints"}, + {"value": 18, "name": "DarkwraithPoints"}, + {"value": 19, "name": "PathOfDragonPoints"}, + {"value": 20, "name": "GravelordServantPoints"}, + {"value": 21, "name": "ForestHunterPoints"}, + {"value": 22, "name": "BladeOfTheDarkmoonPoints"}, + {"value": 23, "name": "ChaosServantPoints"}, + {"value": 24, "name": "WarriorOfSunlightLevel"}, + {"value": 25, "name": "DarkwraithLevel"}, + {"value": 26, "name": "PathOfDragonLevel"}, + {"value": 27, "name": "GravelordServantLevel"}, + {"value": 28, "name": "ForestHunterLevel"}, + {"value": 29, "name": "BladeOfTheDarkmoonLevel"}, + {"value": 30, "name": "ChaosServantLevel"}, + {"value": 31, "name": "ReturnResultOfHardcodedEventFlag"} + ] + }, + { + "name": "PlayerStat", + "games": ["bb"], + "entries": [ + {"value": 0, "name": "Vitality"}, + {"value": 2, "name": "Endurance"}, + {"value": 3, "name": "Strength"}, + {"value": 4, "name": "Skill"}, + {"value": 5, "name": "Bloodtinge"}, + {"value": 6, "name": "Arcane"}, + {"value": 8, "name": "EchoesCollected"}, + {"value": 9, "name": "TotalGetEchoes"}, + {"value": 10, "name": "Humanity"}, + {"value": 11, "name": "CovenantType"}, + {"value": 12, "name": "Gender"} + ] + }, + { + "name": "TalkOptionsType", + "entries": [ + {"value": 0, "name": "Old"}, + {"value": 1, "name": "Regular"} + ] + }, + { + "name": "Trophy", + "games": ["ds3"], + "entries": [ + {"value": 0, "name": "AllAchievements"}, + {"value": 1, "name": "LinkTheFirstFlame"}, + {"value": 2, "name": "EndOfFire"}, + {"value": 3, "name": "UsurpationOfFire"}, + {"value": 4, "name": "AbyssWatchers"}, + {"value": 5, "name": "YhormTheGiant"}, + {"value": 6, "name": "Aldrich"}, + {"value": 7, "name": "PrinceLothric"}, + {"value": 8, "name": "SupremeWeapon"}, + {"value": 9, "name": "AllInfusions"}, + {"value": 10, "name": "AllSorceries"}, + {"value": 11, "name": "AllPyromancies"}, + {"value": 12, "name": "AllMiracles"}, + {"value": 13, "name": "AllRings"}, + {"value": 14, "name": "AllGestures"}, + {"value": 15, "name": "UltimateBonfire"}, + {"value": 16, "name": "UltimateEstus"}, + {"value": 17, "name": "WarriorOfSunlight"}, + {"value": 18, "name": "WayOfBlue"}, + {"value": 19, "name": "BlueSentinels"}, + {"value": 20, "name": "BladeOfTheDarkmoon"}, + {"value": 21, "name": "RosariasFingers"}, + {"value": 22, "name": "MoundMakers"}, + {"value": 23, "name": "WatchdogsOfFarron"}, + {"value": 24, "name": "AldrichFaithful"}, + {"value": 25, "name": "UntendedGraves"}, + {"value": 26, "name": "ArchdragonPeak"}, + {"value": 27, "name": "IudexGundyr"}, + {"value": 28, "name": "BorealValleyVordt"}, + {"value": 29, "name": "RottedGreatwood"}, + {"value": 30, "name": "CrystalSage"}, + {"value": 31, "name": "DeepDeacons"}, + {"value": 32, "name": "HighLordWolnir"}, + {"value": 33, "name": "PontiffSulyvahn"}, + {"value": 34, "name": "BorealDancer"}, + {"value": 35, "name": "DragonslayerArmour"}, + {"value": 36, "name": "OldDemonKing"}, + {"value": 37, "name": "ConsumedOceiros"}, + {"value": 38, "name": "ChampionGundyr"}, + {"value": 39, "name": "AncientWyvern"}, + {"value": 40, "name": "NamelessKing"}, + {"value": 41, "name": "Enkindle"}, + {"value": 42, "name": "EmbraceTheFlame"} + ] + }, + { + "name": "Trophy", + "games": ["ds1", "ds1r"], + "entries": [ + {"value": 0, "name": "AllAchievements"}, + {"value": 1, "name": "ToLinkTheFire"}, + {"value": 2, "name": "DarkLord"}, + {"value": 3, "name": "KnightsHonor"}, + {"value": 4, "name": "WisdomOfASage"}, + {"value": 5, "name": "BondOfAPyromancer"}, + {"value": 6, "name": "PrayerOfAMaiden"}, + {"value": 7, "name": "WayOfWhite"}, + {"value": 8, "name": "PrincessGuard"}, + {"value": 9, "name": "BladeOfTheDarkmoon"}, + {"value": 10, "name": "WarriorOfSunlight"}, + {"value": 11, "name": "ForestHunter"}, + {"value": 12, "name": "Darkwraith"}, + {"value": 13, "name": "PathOfTheDragon"}, + {"value": 14, "name": "GravelordServant"}, + {"value": 15, "name": "ChaosServant"}, + {"value": 16, "name": "StrongestWeapon"}, + {"value": 17, "name": "CrystalWeapon"}, + {"value": 18, "name": "LightningWeapon"}, + {"value": 19, "name": "RawWeapon"}, + {"value": 20, "name": "MagicWeapon"}, + {"value": 21, "name": "EnchantedWeapon"}, + {"value": 22, "name": "DivineWeapon"}, + {"value": 23, "name": "OccultWeapon"}, + {"value": 24, "name": "FireWeapon"}, + {"value": 25, "name": "ChaosWeapon"}, + {"value": 26, "name": "Enkindle"}, + {"value": 27, "name": "EstusFlask"}, + {"value": 28, "name": "ReachLordran"}, + {"value": 29, "name": "RingTheBellUndeadChurch"}, + {"value": 30, "name": "RingTheBellQuelaagsDomain"}, + {"value": 31, "name": "RiteOfKindling"}, + {"value": 32, "name": "ArtOfAbysswalking"}, + {"value": 33, "name": "ReachAnorLondo"}, + {"value": 34, "name": "Lordvessel"}, + {"value": 35, "name": "GravelordNito"}, + {"value": 36, "name": "BedOfChaos"}, + {"value": 37, "name": "TheFourKings"}, + {"value": 38, "name": "SeathTheScaleless"}, + {"value": 39, "name": "DarksunGwyndolin"}, + {"value": 40, "name": "CrossbreedPriscilla"} + ] + }, + { + "name": "Trophy", + "games": ["bb"], + "entries": [ + {"value": 0, "name": "AllTrophies"}, + {"value": 1, "name": "YharnamSunrise"}, + {"value": 2, "name": "HonoringWishes"}, + {"value": 3, "name": "ChildhoodsBeginning"}, + {"value": 4, "name": "YharnamQueen"}, + {"value": 5, "name": "HuntersEssence"}, + {"value": 6, "name": "HuntersCraft"}, + {"value": 7, "name": "WeaponMaster"}, + {"value": 8, "name": "BloodGemMaster"}, + {"value": 9, "name": "RuneMaster"}, + {"value": 10, "name": "Cainhurst"}, + {"value": 11, "name": "TheChoir"}, + {"value": 12, "name": "SourceoftheDream"}, + {"value": 13, "name": "LectureBuilding"}, + {"value": 14, "name": "FatherGascoigne"}, + {"value": 15, "name": "VicarAmelia"}, + {"value": 16, "name": "ShadowofYharnam"}, + {"value": 17, "name": "RomVacousSpider"}, + {"value": 18, "name": "OneReborn"}, + {"value": 19, "name": "Micolash"}, + {"value": 20, "name": "WetNurse"}, + {"value": 21, "name": "ClericBeast"}, + {"value": 22, "name": "BloodStarvedBeast"}, + {"value": 23, "name": "WitchofHemwick"}, + {"value": 24, "name": "Paarl"}, + {"value": 25, "name": "Amygdala"}, + {"value": 26, "name": "Logarius"}, + {"value": 27, "name": "Emissary"}, + {"value": 28, "name": "Ebrietas"}, + {"value": 29, "name": "BloodGemContact"}, + {"value": 30, "name": "RuneContract"}, + {"value": 31, "name": "PthumeruChalice"}, + {"value": 32, "name": "AilingLoranChalice"}, + {"value": 33, "name": "IszChalice"}, + {"value": 34, "name": "OldHuntersEssence"}, + {"value": 35, "name": "OrphanofKos"}, + {"value": 36, "name": "Ludwig"}, + {"value": 37, "name": "LadyMaria"}, + {"value": 38, "name": "LivingFailures"}, + {"value": 39, "name": "Laurence"} + ] + }, + { + "name": "Trophy", + "games": ["sdt"], + "entries": [ + {"value": 0, "name": "AllAchievements"}, + {"value": 1, "name": "ManWithoutEqual"}, + {"value": 2, "name": "AshinaTraveler"}, + {"value": 3, "name": "MasterOfTheProsthetic"}, + {"value": 4, "name": "HeightOfTechnique"}, + {"value": 5, "name": "AllProstheticTools"}, + {"value": 6, "name": "AllNinjitsuTechniques"}, + {"value": 7, "name": "PeakPhysicalStrength"}, + {"value": 8, "name": "UltimateHealingGourd"}, + {"value": 9, "name": "ImmortalSeverance"}, + {"value": 10, "name": "Purification"}, + {"value": 11, "name": "DragonsHomecoming"}, + {"value": 12, "name": "Shura"}, + {"value": 13, "name": "SwordSaintIsshinAshina"}, + {"value": 14, "name": "MasterOfTheArts"}, + {"value": 15, "name": "LazulineUpgrade"}, + {"value": 16, "name": "ReveredBlade"}, + {"value": 17, "name": "ShinobiProsthetic"}, + {"value": 18, "name": "MemorialMob"}, + {"value": 19, "name": "Resurrection"}, + {"value": 20, "name": "GyoubuMasatakaOniwa"}, + {"value": 21, "name": "ThePhantomLadyButterfly"}, + {"value": 22, "name": "GenichiroAshina"}, + {"value": 23, "name": "GuardianApe"}, + {"value": 24, "name": "GuardianApeImmortalitySevered"}, + {"value": 25, "name": "FoldingScreenMonkeys"}, + {"value": 26, "name": "GreatShinobiOwl"}, + {"value": 27, "name": "FatherSurpassed"}, + {"value": 28, "name": "CorruptedMonk"}, + {"value": 29, "name": "GraciousGiftOfTears"}, + {"value": 30, "name": "IsshinAshina"}, + {"value": 31, "name": "DemonOfHatred"}, + {"value": 32, "name": "GreatSerpent"}, + {"value": 33, "name": "GreatColoredCarp"} + ] + }, + { + "name": "Trophy", + "games": ["er"], + "entries": [ + {"value": 0, "name": "AllAchievements"}, + {"value": 1, "name": "EldenLord"}, + {"value": 2, "name": "AgeOfTheStars"}, + {"value": 3, "name": "LordOfFrenziedFlame"}, + {"value": 4, "name": "ShardbearerGodrick"}, + {"value": 5, "name": "ShardbearerRadahn"}, + {"value": 6, "name": "ShardbearerMorgott"}, + {"value": 7, "name": "ShardbearerRykard"}, + {"value": 8, "name": "ShardbearerMalenia"}, + {"value": 9, "name": "ShardbearerMohg"}, + {"value": 10, "name": "MalikethTheBlackBlade"}, + {"value": 11, "name": "HoarahLouxWarrior"}, + {"value": 12, "name": "DragonlordPlacidusax"}, + {"value": 13, "name": "GodSlayingArmament"}, + {"value": 14, "name": "LegendaryArmaments"}, + {"value": 15, "name": "LegendaryAshenRemains"}, + {"value": 16, "name": "LegendarySorceriesAndIncantations"}, + {"value": 17, "name": "LegendaryTalismans"}, + {"value": 18, "name": "RennalaQueenOfTheFullMoon"}, + {"value": 19, "name": "LichdragonFortissax"}, + {"value": 20, "name": "GodskinDuo"}, + {"value": 21, "name": "FireGiant"}, + {"value": 22, "name": "DragonkinSoldierOfNokstella"}, + {"value": 23, "name": "RegalAncestorSpirit"}, + {"value": 24, "name": "ValiantGargoyles"}, + {"value": 25, "name": "MargitTheFellOmen"}, + {"value": 26, "name": "RedWolfOfRadagon"}, + {"value": 27, "name": "GodskinNoble"}, + {"value": 28, "name": "MagmaWyrmMakar"}, + {"value": 29, "name": "GodfreyFirstEldenLord"}, + {"value": 30, "name": "MohgTheOmen"}, + {"value": 31, "name": "MimicTear"}, + {"value": 32, "name": "LorettaKnightOfTheHaligtree"}, + {"value": 33, "name": "AstelNaturalbornOfTheVoid"}, + {"value": 34, "name": "LeonineMisbegotten"}, + {"value": 35, "name": "RoyalKnightLoretta"}, + {"value": 36, "name": "ElemerOfTheBriar"}, + {"value": 37, "name": "AncestorSpirit"}, + {"value": 38, "name": "CommanderNiall"}, + {"value": 39, "name": "RoundtableHold"}, + {"value": 40, "name": "GreatRune"}, + {"value": 41, "name": "ErdtreeAflame"} + ] + }, + { + "name": "MissionFlag", + "entries": [ + {"value": 0, "name": "Unlocked"}, + {"value": 1, "name": "Complete"} + ] + }, + { + "name": "MissionAltType", + "entries": [ + {"value": 0, "name": "Original"}, + {"value": 1, "name": "Alt"} + ] + }, + { + "name": "Hero", + "games": ["nr"], + "entries": [ + {"value": 1, "name": "Wylder"}, + {"value": 2, "name": "Guardian"}, + {"value": 3, "name": "Ironeye"}, + {"value": 4, "name": "Duchess"}, + {"value": 5, "name": "Raider"}, + {"value": 6, "name": "Revenant"}, + {"value": 7, "name": "Recluse"}, + {"value": 8, "name": "Executor"} + ] + } + ], + "condition_arg": { + "name": "condition", + "type": "bool" + } +} \ No newline at end of file diff --git a/dist/Base/ezstate.yaml b/dist/Base/ezstate.yaml new file mode 100644 index 0000000..09447df --- /dev/null +++ b/dist/Base/ezstate.yaml @@ -0,0 +1,70 @@ +ExistingStates: + ## Cathedral of the Deep + + t350301: # Patches + # Remove the option to say you haven't met Patches before in the Cathedral. + - Group: 8 + State: 5 + If: safequest + EditCommands: + - Match: {Name: AddTalkListData, Arguments: [null, 14020001]} + Remove: true + + ## Firelink Shrine + + t400220: # Greirat + # Make Greirat unable to go to Irithyll until Patches is in Firelink, and thus is able to rescue + # him. This ensures you can't softlock yourself if, for example, Greirat's shop has the Tower Key. + - Group: 8 + State: 14 + If: safequest + EditConditions: + - Match: {Target: 16} + AndAlso: GetEventStatus(1365) + + t400230: # Orbeck + # Replace references to four specific Orbeck spell purchase events with one custom event that we + # set once the player has purchased any seven spells. This ensures that players don't have to + # guess which randomized items to buy in order to trigger Orbeck's Slumbering Dragoncrest Ring + # lot. + - Group: 17 + State: 1 + EditConditions: + - Match: {Target: 12} + Replace: {73301140: 74000800, 73301150: 74000800, 73301160: 74000800, 73301170: 74000800} + + t400260: # Irina + # Replace the references to the dark tomes in Irina's ESD with 0s. There aren't any items with ID + # 0, so she'll never take the tomes or anything in their place, and thus never enter dark mode. + - Group: 7 + State: 16 + If: safequest + EditCommands: + - Match: {Arguments: [2119, 2120, 2121, 2144, 2145]} + Arguments: {3: {Set: 0}, 4: {Set: 0}} + + t400301: # Patches + # Remove the option to not forgive Patches in Firelink. + - Group: 8 + State: 8 + If: safequest + EditCommands: + - Match: {Name: AddTalkListData, Arguments: [null, 14020011]} + Remove: true + + # Make Patches enquire about Greirat even if you bought the Catarina set lots. + - Group: 8 + State: 1 + If: safequest + EditConditions: + - Match: {Target: 6} + Set: GetEventStatus(1204) + + # Make Patches talk about Greirat (and trigger the Horsehoof Ring lot) as long as Greirat has been + # freed at all. + - Group: 24 + State: 7 + If: safequest + EditConditions: + - Match: {Target: 12} + Set: "!GetEventStatus(1200)"