Zap Gun For Hire
Members-
Posts
417 -
Joined
-
Last visited
Content Type
Profiles
Forums
Blogs
Everything posted by Zap Gun For Hire
-
Quick question for any Obsidian devs that might be hanging out here. In the patch that dropped yesterday, it looks like a new line was added to calls in the various .*****bundle files. Specfically anything that used to look like this: (random example) { "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean IsGlobalValue(String, Operator, Int32)", "Parameters": ["n_Crookspur_Owner_State", "EqualTo", "0"], "UnrealCall": "", "FunctionHash": 901380568, "ParameterHash": -784216156 }, "Not": false, "Operator": 0 } now looks like this: { "$type": "OEIFormats.FlowCharts.ConditionalCall, OEIFormats", "Data": { "FullName": "Boolean IsGlobalValue(String, Operator, Int32)", "Parameters": ["n_Crookspur_Owner_State", "EqualTo", "0"], "Flags": "", "UnrealCall": "", "FunctionHash": 901380568, "ParameterHash": -784216156 }, "Not": false, "Operator": 0 } That is, a line that now says 'Flags: ""' has been added to every single Parameters entry, near as I can tell. Also, near as I can tell, my current local mods are still working as intended. What I am wondering is how important will it be to add all of these Flags entries to keep our mods running smoothly. I mean, obviously it should be done eventually just to forestall problems and keep things as close to the base code as possible. But mostly I'm wonder how much of a priority this is to change in our own mods. And, possibly, just what the heck that setting is.
-
Maybe check to see if your DLC is actually installed? If you're using Steam, it can be a bit finicky. You know you have the DLC properly installed if there is stuff in the PillarsOfEternityII_Data/laxc_exported/design/ folder. That's where this DLC got installed this time around. Other than that, don't know what to tell you aside from "games can be buggy at times".
-
After checking, the Arcane Lantern and Blights Lantern are identical in travel speed bonus and price, so aside from cosmetics not sure what the difference is. Might be something that comes into play down the line, though. The Lurker Helm and Rudder also appears to be identical in specs and price to the Ymyran Steel Helm, FWIW. The Palm Sails are better than the Stormwind Sails in both combat speed and travel (+20 vs +15 in both categories), but you sacrifice sail health (-7 vs 0). Matter of playstyle, I suppose. But for me the Palm Sails would be a no-brainer. The Living Steel Anchor gives a slightly better combat speed than the Ymyran Steel Anchor one (+10 vs +5). Since they're the same price, seems like an easy decision to make as to which one to get.
-
They're in Dunnage and Neketaka via the Supply button after the Captain's Quarters and Menagerie upgrades. You can also get them by taking to Zamar directly. Living Steel Anchor: +10m combat speed, +5% Travel Speed [18,000 gold] Magranite Flamethrower: 0-75m, Reload Time 2 turns, 6-9 damage [3,000 gold] Blight Lantern: +10% Travel Speed [8,000 gold] Lurker Helm and Rudder: +5m Combat Speed [14,000 gold] Palm Sails: +20m Combat Speed, -7 Sail Health, +20% Travel Speed [8,500 gold] I'll edit in the base prices when I load up a game without discounts
-
Three new folks to add from the free DLC dropped today: Haema. 300 gold, two rank cook, Port Maje (Supply Button/Kraken's Eye) Coreto, 1000 gold, four rank navigator, Crookspur (Merchant) Ponamu Bird-Scorned, 1000 gold, three rank boatswain/one rank cannoneer, Tikawara (Supply Button) Still no pure surgeon.
-
Vendors x Mods
Zap Gun For Hire replied to TT1's topic in Pillars of Eternity II: Deadfire: Modding (Spoiler Warning!)
The Loot Lists are just a common pool for store sellers and various chests so, presumably, the game doesn't have to repeat them over and over again for various things. To give one example, here is the code for the loot list "Loot_Small_Lore_Books": { "$type": "Game.GameData.LootListGameData, Assembly-CSharp", "DebugName": "Loot_Small_Lore_Books", "ID": "7d73f078-a79e-4bf6-aa8c-c098226e2a7e", "Components": [{ "$type": "Game.GameData.LootListComponent, Assembly-CSharp", "Conditional": { "Operator": 0, "Components": [] }, "OutputChance": 1, "OutputMode": "OneRandom", "Items": [{ "Conditional": { "Operator": 0, "Components": [] }, "OutputChance": 1, "MinCount": 1, "MaxCount": 1, "Weight": 1, "ItemID": "00000000-0000-0000-0000-000000000000", "LootListID": "0c6bf95d-cc37-4cff-ba64-8c5999ce9ae9", "LockedVisible": "false" }, { "Conditional": { "Operator": 0, "Components": [] }, "OutputChance": 1, "MinCount": 1, "MaxCount": 1, "Weight": 1, "ItemID": "00000000-0000-0000-0000-000000000000", "LootListID": "97b25457-a2be-470e-b4ee-7b9c0e28febc", "LockedVisible": "false" }, { "Conditional": { "Operator": 0, "Components": [] }, "OutputChance": 1, "MinCount": 1, "MaxCount": 1, "Weight": 1, "ItemID": "00000000-0000-0000-0000-000000000000", "LootListID": "2873ba30-6008-496d-ab63-28a4a1df0ed7", "LockedVisible": "false" }, { "Conditional": { "Operator": 0, "Components": [] }, "OutputChance": 1, "MinCount": 1, "MaxCount": 1, "Weight": 1, "ItemID": "00000000-0000-0000-0000-000000000000", "LootListID": "efa11f1a-6d67-4316-ae76-3e4dcaed1feb", "LockedVisible": "false" }, { "Conditional": { "Operator": 0, "Components": [] }, "OutputChance": 1, "MinCount": 1, "MaxCount": 1, "Weight": 1, "ItemID": "00000000-0000-0000-0000-000000000000", "LootListID": "27906fbb-5bca-4d50-a915-4fd5b7318f75", "LockedVisible": "false" }, { "Conditional": { "Operator": 0, "Components": [] }, "OutputChance": 1, "MinCount": 1, "MaxCount": 1, "Weight": 1, "ItemID": "00000000-0000-0000-0000-000000000000", "LootListID": "d507a8fd-742f-4257-84d5-21430d862124", "LockedVisible": "false" }, { "Conditional": { "Operator": 0, "Components": [] }, "OutputChance": 1, "MinCount": 1, "MaxCount": 1, "Weight": 1, "ItemID": "00000000-0000-0000-0000-000000000000", "LootListID": "1a06c41f-34f0-404d-8f09-7e381a76a7e7", "LockedVisible": "false" } ] } ] } "OutputMode: OneRandom" presumably means it will take one item from the list supplied. In that list there are seven more sets of loot lists to choose from: "0c6bf95d-cc37-4cff-ba64-8c5999ce9ae9": ( "Loot_Small_Lore_Books_Aedyran") "97b25457-a2be-470e-b4ee-7b9c0e28febc": ("Loot_Small_Lore_Books_Dyrwoodan") "2873ba30-6008-496d-ab63-28a4a1df0ed7": ("Loot_Small_Lore_Books_Huana") "efa11f1a-6d67-4316-ae76-3e4dcaed1feb": ("Loot_Small_Lore_Books_Rauataian") "27906fbb-5bca-4d50-a915-4fd5b7318f75": ("Loot_Small_Lore_Books_Vailian") "d507a8fd-742f-4257-84d5-21430d862124": ("Loot_Small_Lore_Books_Engwithan") "1a06c41f-34f0-404d-8f09-7e381a76a7e7": ("Loot_Small_Lore_Books_General") Each of those lists points to yet another list. Let's just choose the first one ("0c6bf95d-cc37-4cff-ba64-8c5999ce9ae9") (it's long, so I'll put it in a spoiler box) We're finally at the end of the tree here. Each of those codes corresponds to a specific book in the game. Once again, it will pick just one item from the list supplied. For example, the game might pick "dff9da42-ce19-4e0b-9370-261e1124fb66" which is one of the Woedican Holy Texts ("Psalm to Woedica" in case people care). So, basically, in this case, it's a branching tree to pick an item. At the top of his loot list it also said this: { "Conditional": { "Operator": 0, "Components": [] }, "OutputChance": 1, "MinCount": 3, "MaxCount": 5, "Weight": 1, "ItemID": "00000000-0000-0000-0000-000000000000", "LootListID": "7d73f078-a79e-4bf6-aa8c-c098226e2a7e", "LockedVisible": "false" } The OutputChance of 1 means that there's a 100% chance the game will check the following list for items to put in the store/container. The MInCount of 3 means that the list will be checked at least three times and the MaxCount of 5 means no more than five times. The entire upshot of all that stuff above (including the many many many LootLists I didn't copy over, is that there will be three to five lore books in his store to be bought, randomly chosen from a bunch of different possibilities. And that's just from one of his LootListID checks. He has a few more. Basically the real way to tell if something is checking another LootList is if the ItemID is blank. If it is, it's pointing to another list. If it isn't, you've either reached the end of a tree or there wasn't a tree to begin with, as in the case of the guaranteed Spyglass and lockpicks. ==== As for killing him and taking his stuff, the game handles that differently, though where it's defined I couldn't tell you right this moment. So, no, killing him will NOT give you stuff he had for sale in his store. -
Vendors x Mods
Zap Gun For Hire replied to TT1's topic in Pillars of Eternity II: Deadfire: Modding (Spoiler Warning!)
Posted this while I was typing up my post. So, yeah, looks like what I was looking for is tied in the level design then, yes? -
Vendors x Mods
Zap Gun For Hire replied to TT1's topic in Pillars of Eternity II: Deadfire: Modding (Spoiler Warning!)
Coincidentally, I was doing a deep dive on vendors in the game code last night as I was investigating just how discounts worked, how they were tied to factions, and when they were applied. Found out some interesting info (much of which isn't relevant to this topic). Apparently, vendors are defined all over the various gamedatabundles, but I haven't quite figured out how they are all connected. Near as I can figure, relevant entries that we care about (not counting their actual text dialogue) for vendors can be found in: characters.gamedatabundle (gives the character stats, doesn't appear to have any store info in it though) factions.gamedatabundle (gives the store the faction its tied to as well as any conditions for discounts/increases) items.gamedatabundle (gives the loot list table for the store, loot lists can be nested with one referring to another) xxxxxxxx.conversationbundle (where the store is actually opened/closed when talking with the relevant character/ship) The thing that I can't suss if figuring out how the game knows a particular store is tied to a particular character unless it is tied into the level design data that isn't easily access by use peons yet. Take for instance Sanza in Queen's Bearth. He has the following info in factions.gamedatabundle: { "$type": "Game.GameData.VendorGameData, Assembly-CSharp", "DebugName": "Vendor_03_Cartographer", "ID": "8d2d92e7-8a24-49bf-a2ba-542046f61e2a", "Components": [{ "$type": "Game.GameData.VendorComponent, Assembly-CSharp", "VendorName": 143, "StoreIconPath": "gui/innicons/storesign_generic.png", "PortraitPath": "", "StartingFactionID": "1346f12d-ca42-4add-9599-aa3fe72f5e53", "ConditionalRates": [], "LockedDescriptionString": -1 } ] } StartingFactionID ties his discounts/increases to the VTC and the discounts/increases they give when they're happy/upset. And the following info in his conversationbundle: "OnExitScripts": [ { "Data": { "FullName": "Void OpenStore(Guid)", "Parameters": [ "faafe4d0-16e3-4d76-8b34-6d42132ecd84" ], "UnrealCall": "", "FunctionHash": 215165789, "ParameterHash": 44899091 }, "Conditional": { "Operator": 0, "Components": [] } } ] which opens his actual store. The following Loot List is tied to him in items.gamedatabundle: { "$type": "Game.GameData.LootListGameData, Assembly-CSharp", "DebugName": "Store_03_Cartographer", "ID": "1522b748-9761-4c17-981c-ebe76dfc5127", "Components": [{ "$type": "Game.GameData.LootListComponent, Assembly-CSharp", "Conditional": { "Operator": 0, "Components": [] }, "OutputChance": 1, "OutputMode": "All", "Items": [{ "Conditional": { "Operator": 0, "Components": [] }, "OutputChance": 1, "MinCount": 5, "MaxCount": 5, "Weight": 1, "ItemID": "a5200562-c6ae-45b6-8d21-a3d331ae6f11", "LootListID": "00000000-0000-0000-0000-000000000000", "LockedVisible": "false" }, { "Conditional": { "Operator": 0, "Components": [] }, "OutputChance": 1, "MinCount": 1, "MaxCount": 1, "Weight": 1, "ItemID": "d9a9bf4e-8903-4806-9f93-ab7edc219fa4", "LootListID": "00000000-0000-0000-0000-000000000000", "LockedVisible": "false" }, { "Conditional": { "Operator": 0, "Components": [] }, "OutputChance": 1, "MinCount": 3, "MaxCount": 5, "Weight": 1, "ItemID": "00000000-0000-0000-0000-000000000000", "LootListID": "7d73f078-a79e-4bf6-aa8c-c098226e2a7e", "LockedVisible": "false" }, { "Conditional": { "Operator": 0, "Components": [] }, "OutputChance": 1, "MinCount": 3, "MaxCount": 5, "Weight": 1, "ItemID": "00000000-0000-0000-0000-000000000000", "LootListID": "b0b26aec-689b-4e1a-944d-904dc986571d", "LockedVisible": "false" }, { "Conditional": { "Operator": 0, "Components": [] }, "OutputChance": 1, "MinCount": 1, "MaxCount": 3, "Weight": 1, "ItemID": "00000000-0000-0000-0000-000000000000", "LootListID": "5eb65b2e-0a71-4212-aa21-e28b201e6b8f", "LockedVisible": "false" }, { "Conditional": { "Operator": 0, "Components": [] }, "OutputChance": 1, "MinCount": 3, "MaxCount": 5, "Weight": 1, "ItemID": "00000000-0000-0000-0000-000000000000", "LootListID": "9ff68e84-9f26-4435-8292-7d4a9988ca81", "LockedVisible": "false" } ] } ] } which gives the items he sells. And his actual character entry, which doesn't seem to have any relevant info for us: { "$type": "Game.GameData.CharacterStatsGameData, Assembly-CSharp", "DebugName": "CHA_22_HR_Cartographer", "ID": "c2c1af3a-1b5d-43c6-90a8-dbe5caaa4834", "Components": [{ "$type": "Game.GameData.CharacterStatsComponent, Assembly-CSharp", "DisplayName": 489, "Gender": "Male", "RaceID": "5ea84750-17c7-419b-8beb-c121c5d68c55", "SubraceID": "48208f19-7f64-46f9-a68e-fbcb596b89eb", "CultureID": "00000000-0000-0000-0000-000000000000", "CharacterProgressionTableID": "92c24eac-7726-4200-bb06-b3ecb08025f2", "BaseClassLevel": 1, "SpeakerID": "e91bd37f-2196-43ae-80ff-21e0daf47e92", "NakedArmorMaterial": "None", "CreatureTypeGDID": "2b0d0783-3b60-4a67-abce-a5330f242833", "BestiaryEntryID": "00000000-0000-0000-0000-000000000000", "BackgroundID": "05594ae8-9d20-4592-97b5-62a1d69c1ddb", "KeywordsIDs": [], "BaseMight": 10, "BaseConstitution": 10, "BaseDexterity": 10, "BasePerception": 10, "BaseIntellect": 10, "BaseResolve": 10, "SkillsList": [], "ImmuneToEngagement": "false", "ImmuneToAttacks": "false", "PerceptionType": "Normal", "StealthDetectionID": "4b59d454-61f3-472f-906f-ff36afd861c0", "StealingAdjustmentID": "00000000-0000-0000-0000-000000000000", "StartingMaxEngageableEnemyCount": 0, "StartingAttackSpeedMultiplier": 1, "StartingRateOfFireMultiplier": 1, "StartingReloadTimeMultiplier": 1, "PersonalityID": "00000000-0000-0000-0000-000000000000", "AnimationAudioEventListID": "325265c3-af6f-410b-9c16-42964b602404", "MinLevelAdjustment": -50, "MaxLevelAdjustment": 50, "IsNamedCharacter": "false" }, { "$type": "Game.GameData.EquipmentSetComponent, Assembly-CSharp", "HeadID": "00000000-0000-0000-0000-000000000000", "NeckID": "00000000-0000-0000-0000-000000000000", "CapeID": "00000000-0000-0000-0000-000000000000", "ChestID": "382d5e63-6f49-4240-bfb1-45026bfe548f", "HandsID": "00000000-0000-0000-0000-000000000000", "RightHandRingID": "00000000-0000-0000-0000-000000000000", "LeftHandRingID": "00000000-0000-0000-0000-000000000000", "FeetID": "00000000-0000-0000-0000-000000000000", "WaistID": "00000000-0000-0000-0000-000000000000", "GrimoireOrTrinketID": "00000000-0000-0000-0000-000000000000", "PetID": "00000000-0000-0000-0000-000000000000", "WeaponSets": [], "PropsIDs": [] } ] } What I can't figure out is how the game knows that LootList "1522b748-9761-4c17-981c-ebe76dfc5127" is tied to store "8d2d92e7-8a24-49bf-a2ba-542046f61e2a" and is opened when "faafe4d0-16e3-4d76-8b34-6d42132ecd84" is called in his conversation bundle. Usually I can track this stuff down with the relevant info in the rest of the files, but this time I'm coming up empty. Maybe I'm missing something in one of the databundles though. Wouldn't surprise me given how complex this game is. -
I've done a bit more testing and I was able to buy the crates with VTC 3+ or passing a Bluff check of 9. It's interesting on that bluff check of 9 though, as it's giving me one of the VTC 3+ responses (the Diplomacy 6/Clever one). So I think her conversation tree is a bit bugged then, yes. If I knew the checks needed to hit the 1500 gp per crate options, I could check that out as well. As it is though, does appear to be some sort of bug on your end so might as well let Obsidian know about it. ==== For the record: Path 1: 1. I need refined luminous adra. 1. Continue. 1. [VTC Good 3+] "I've done the Vallian Trading Company my share of favors. It's time you do one for me. 2. Just mind your business and make the sale. ****OR **** 1. [Diplomacy 6] [Wink]"Surely I needn't spend it all, aimica." [Clever] 1. Continue. 1. "I'll take [X amount of crates]." 1. [Give X amount of copper] "Here you are." The other path is: 1. I need refined luminous adra. 1. Continue. 2. [bluff 9] [Lie] "If my client likes what you've got, this won't be my last order." 2. Just mind your business and make the sale. 1. Continue. 1. "I'll take [X amount of crates]." 1. [Give X amount of copper] "Here you are." After that, you can't ask her for more crates of the stuff.
-
I just checked and, yes, you can only buy the crates from the mill while you're on the Goods and Services quest, as the amount you need for the quest (which is variable) is given as a dialogue option. I wasn't able to get the dialogue option to buy the stuff before quest was started or after it was completed. I was able to buy the crates when I had Rep 3+ with the VTC, and I bypassed all of the haggling. I don't think I have a savefile where I had a lower rep with the VTC and was able to get that quest. I'll try to check it out with a lower rep when I get the chance.
-
Oh Konstanten
Zap Gun For Hire replied to ericdy's topic in Pillars of Eternity II: Deadfire Stories (Spoiler Warning!)
I once had Konstanten make an observation when I first entered the Luminous Bathhouse. Haven't been able to recreate it though. -
WHY IMPS NEED ARMY. ARMYS BORING. FIGHT FIGHT FIGHT. PAY ROTTEN TO. ME RATHER BE LUMBER-JACK. ME SING SING SING.... ME A LUMBER-JACK AND ME OKAY. ME SLEEP ALL NIGHT AND ME WORK ALL DAY ***HE A LUMBER-JACK AND HE OKAY. HE SLEEP ALL NIGHT AND HE WORK ALL DAY.*** ME CUT DOWN TREE. ME EAT ME LUNCH. ME USE TOI-LET-TRY ON MEC-WYNS-DAG ME GO SHOPPING. ME HAVE FRIED UGLY FOR TEA ***HE A LUMBER-JACK AND HE OKAY. HE SLEEP ALL NIGHT AND HE WORK ALL DAY.*** ME CUT DOWN TREE. ME SKIP AND JUMP. ME PUT ON ARKEMYR ROBES. ME FLY AROUND IN BATHHOUSE. ... WERE ALL GOING. EH. YOU BORING ANYWAY. YOU STINK TO. ME LOOK FOR MORE TREES.
-
To save Oswald AND not fight the Woedicans, you need to pass a silent Bluff check of 7. I say silent because the game doesn't tell you that's the skill being checked (even in the NPC's conversation window). But according to the data files there are two separate Bluff checks of 3 and 7 in the dialogue trees. I don't believe the Bluff check of 3 can lead to an option that doesn't lead to a fight. The one that does though is the following: 1: Do you condemn the innocent out of spite - or mere incompetence? [Rational] 1: I'm a Watcher. I've conversed with the tortured souls that met your justice. Not all were guilty. 1: Continue. 3: [Lie] "Too many to count." [hidden Bluff check of 7 to pass - if you fail it she calls you a liar] You know you passed the Bluff check if Lödwyn says in response "I sense... no deception in your words. Could it be we've wronged so many?" She then basically says 'Take this dofus before I change my mind while I pray to my god for some answers'. ... Truth be told, I'd rather kick them all in the head and be done with it. ==== Basically she doesn't give one rotten fig if one person who was innocent was killed by them. But she is shaken if she believes your lie that they killed 'countless' innocents. If you lie and tell her "only a few" and pass the Bluff check of 3 for her to believe you, she'll still try to rationalize her actions away. Aloth does chime in with an observation at that point which is tied to his PoE I gamestate (his ending as well as his autonomy/authority axis) so it MIGHT be possible that he can help talk her down. But it's more likely it's either Bluff 7 or your party gets a bit of a workout if one wants to save Oswald.
-
Speaking of the Sandswept Ruins and those effing high level traps: There is a Hidden Object in the Sandswept Ruins that will disarm every last trap in the Sandswept Ruins, including the flames surrounding the altar AND the death trap in the room. To find it one must first get into the initially inaccessible chamber right next to the entrance (it's the one that has four Sigils of Death in it). That chamber is accessed by flipping a switch next to the chest past the traps in the first hallway (which are all diff 6): The catch? Just need a Perception of 20 to find the hidden switch once one gets to that chamber. : Still, this is the path for people doing a Solo run to be able get the stuff off of that altar, since they can't get past the flames otherwise (they won't be able to simultaneously flip the four switches needed to get rid of the flames surrounding the altar the 'normal' way).
-
Serafen's "Gift"
Zap Gun For Hire replied to Suen's topic in Pillars of Eternity II: Deadfire Stories (Spoiler Warning!)
Serafen has issues, okay? -
It is a little bit of a leap of logic though, given that the Watcher doesn't have any reason to suspect it was The Sorcerer involved in slaving. Maybe if they were randomly asking other Principi about slaving, it could work (and if they did, I didn't notice). But it does seem a bit "out of the blue"-ish. It's difficult because Obsidian obviously wants Serafen to be shocked and surprised that it was his ship involved, so the Watcher can't find clues to that effect beforehand. But as it is, it seems to me that the Watcher has to add two (Remaro mutinied and is REALLY disillusioned with the Principi) and two (saaaaay, don't the Prinicipi really hate slaving? And golly gee willikers, some Principi are involved in slaving) together to get that convo check. Which seems like an insight check to me, if a much smaller one than the [insight 10] that is already there. Seems like a rare-ish weak story link, at least by Obsidian standards. Not that it bothers me too much, but it did raise an eyebrow slightly. Maybe The Watcher could have overheard some 'dark rumors' about either The Sorcerer, Bastain, or even better Remaro, being sighted near/sailing toward Crookspur. Say the pro-slaving elements within the Prinicipi want to discredit Remaro and make their shiphunters really hate him. Could insinuate things without attracting too much attention. Serafen could then given an impassioned speech about how this was a load of seagull **** and that no one on The Sorcerer could be ever involved in slaving, especially Remaro. Make it so this rumor comes up once the Principi/Crookspur thing starts. Even gives Serafen a good excuse to cuss and vent his mounting frustration at the whole situation. Not like he needs much of a reason. Just a little bit of a tweak to add to the emotional stakes as well as give the Watcher a reason to ask Remaro about slaving in the first place. Ah well, as it is I suppose it works well enough.