Jump to content

Welcome to Obsidian Forum Community
Register now to gain access to all of our features. Once registered and logged in, you will be able to create topics, post replies to existing threads, give reputation to your fellow members, get your own private messenger, post status updates, manage your profile and so much more. If you already have an account, login here - otherwise create an account for free today!
Photo

First Mod (spoilers)


  • Please log in to reply
67 replies to this topic

#61
peardox

peardox

    (5) Thaumaturgist

  • Members
  • 564 posts
  • Location:Manchester, UK
  • Deadfire Backer
This is a merge of older mod posts
 
This is a long and complex subject so I'm doing a Part (1, 2, 3 + last)
 
As this is aimed at both newbies and the experienced I've over-detailed the first part (sorry my friends - the more people who know how to this meand more fun Mods)
 
The conversationbundle MOD is NOT recommended until Obsidian fix conversationbundle overrides. Personally I won't release a MOD using this information, I urge fellow Modders to apply the same restriction. I've got some old REQs that would be easy to do this way.
 
The following will re-write some things at a base level - it's not too bad, only some useless NPC
 
For the sake of showing as much useful information I'm going to take a non vendor and turn them into a vendor
 
This process is currently tied to a real vendor to open their shop, there is no current way to create a new shop but this process is a useful to be aware of if/when Obsidian add ModShops
 
So, let's get started...
 
There are many ways to create a Mod, the simplest only have a single file - <something>.gamedatabundle
 
To make things clear to your fellow Modders it is advisable that you use the same layout as found in exported as while the <something>.gamedatabundle can exist anywhere some files, notably stringtables ATM, MUST exist in a specific place in your Mod.
 
As you've, presumably, played the game and quite likely in a language other than English it's notable that there are a LOT of stock phrases you can easily 'borrow'. All you need is the stringtable ID for that phrase to get nine (9) translations of those.
 
For new phrases you can simply use Google Translate to get some text that (hopefully) is close to what you want to say.
 
For the purposes of this tutorial I'm going to use TT1's Dead Parrot, it's my go-to for explaining things so go grab it from https://www.nexus<sp...mod</span>s/111 as this is a Mod item. Install TT1's Uniques (which includes the infamous Parrot) or the rest of this won't work.
 
While this is possible without a Dead Parrot it's far more informative with one as you'll most likely be Modding that includes some of your own special items.
 
So - let's get started...
 
Create a directory in override - I'll call mine convo, name yours whatever you like but make it unique. As this is a Tutorial I'm not concerned about what I call my personal mod as I'm not releasing it. If/when you do a release it is important that you use a unique directory name, personally I call mine pdx-<mod-name> but the choice is yours.
 
In convo (or whatever you call it) we need to create two directories - design and localised
 
We've now got ...
 
convo
  + design
  + localised
  
In design we now need to create a gamedata directory and in localised we need a deep structure (lemme just go get one I prepared earlier)
 
convo
  + design
    + gamedata
  + localised
    + de
      + text
        + conversations
        + game
    + en
      + text
        + conversations
        + game
    + es
      + text
        + conversations
        + game
    + fr
      + text
        + conversations
        + game
    + it
      + text
        + conversations
        + game
    + pl
      + text
        + conversations
        + game
    + pt
      + text
        + conversations
        + game
    + ru
      + text
        + conversations
        + game
    + zh
      + text
        + conversations
        + game
 
The text/game directories are there simply for convenience, we're not going to use them but they're handy to have as it is presumed you're going to want your new items translations so thought it advisable to make this as simple as possible
 
OK - that's a lot of typing - let's pick on some naff NPC and automate as much of this as possible
 
First off I should point out that I generally use a Linux Shell as I have Windows, Mac and Linux boxes - you can install a Windows-friendly Ubuntu to make everything work everywhere - see https://docs.microso...l/install-win10 if you want that option.
 
As some people will be put off by this I've created versions of both files to automate stuff for you - take your pick of dirstruct.unix or dirstruct.windows
 
Right - you've created your localised directory...
 
cd localised
 
Take your preferred dirstruct version copy it then paste it into a command prompt making sure you're in localised
 
If everything went OK you've now got a load of directories with nothing in them
 
This is the start of a convo Mod - A lot of nothing. Now we want to add something to our nothing...

Attached Files



#62
peardox

peardox

    (5) Thaumaturgist

  • Members
  • 564 posts
  • Location:Manchester, UK
  • Deadfire Backer
Part 2 (merged)
 
Go pick some useless NPC - I'm going for Waenglith as she's fairly useless and exists to endgame (unless I kill her) so let's go find her converstations which turn out to be at 09_cv_dawnstars_priestess.stringtable in each localised text/conversations directory - let's go copy her
 
Waenglith is the naggy woman where you pick Xoti up - when you enter the area you're actually triggering a different convobundle to add Xoti to your party. Once you've got Xoti we switch to her personal convo mode. This ain't the best choice I could have made but she's early + late game interactible. Her conversationbundle is big and confusing as well which don't help but if I design around a complex NPC you should find others far easier to Mod.
 
I intend to Mod another NPC to do something useful - a non-vendor who does little other than talk bull**** to fill a forum Req for the "Chest Of Consumables"
 
Again I've automated this for you so grab Waenglith.unix / windows and paste that lot into your command prompt making sure you're still in localised
 
Congrats - you've now got something we can play with - data
 
Pointless? Not in the slightest - we now get to play.
 
As I mentioned earlier Waenglith is boring - does very little so let's give her a Shop and gift you Dead Parrots (hence TT1's Mod being required to follow this)
 
You can do this without the Dead Parrot but then you'll have to substitute DP's UUID for some stock item. Additionally I want to take you thru two versions of translation.
 
Translation #1 is from the fish seller on Port Maje Harbour shes in exported/localised/[lang]/text/conversations/09_bs_fishmonger.stringtable
 
You'll see that this is the en text
 
    <Entry>
      <ID>6</ID>
      <DefaultText>"Let me see what you have."</DefaultText>
      <FemaleText />
    </Entry>
 
We're going to do all the translations (this is optional but personally I'm going to do it)
 
Open your conversation stringtable I'm English so I'll start here
 
  + localised
    + en
      + text
    + conversations
          + 09_cv_dawnstars_priestess.stringtable
  
At the top you'll see <EntryCount>71</EntryCount> - increase it by one to be safe (we're not sure if it's important but better safe than broken Mod)
 
Now, go to the bottom of the file and copy the pinched phrase above just before
 
  </Entries>
</StringTableFile>
 
We need to increase the ID of our 'borrowed' string - in this case we'll simply add 100 to it so after the edit it looks like this
 
--- Existing ---
    <Entry>
      <ID>72</ID>
      <DefaultText>"I haven't seen Waenglith so riled in a long time. I like you more and more already."</DefaultText>
      <FemaleText />
    </Entry>
--- Existing ---
--- Added ---
    <Entry>
      <ID>106</ID>
      <DefaultText>"Let me see what you have."</DefaultText>
      <FemaleText />
    </Entry>
--- Added ---
--- Existing ---
  </Entries>
</StringTableFile>
 
For easy reference this is "Let me see what you have." in nine (9) langauages - the first line of each entry is merely a pointer for myself so I know what goes where
 
de/text/conversations/09_port_maje
    <Entry>
      <ID>6</ID>
      <DefaultText>"Zeig mir, was du anzubieten hast."</DefaultText>
      <FemaleText />
    </Entry>
en/text/conversations/09_port_maje
    <Entry>
      <ID>6</ID>
      <DefaultText>"Let me see what you have."</DefaultText>
      <FemaleText />
    </Entry>
es/text/conversations/09_port_maje
    <Entry>
      <ID>6</ID>
      <DefaultText>"Déjame ver qué es lo que tienes".</DefaultText>
      <FemaleText />
    </Entry>
fr/text/conversations/09_port_maje
    <Entry>
      <ID>6</ID>
      <DefaultText>"Montrez-moi ce que vous avez."</DefaultText>
      <FemaleText />
    </Entry>
it/text/conversations/09_port_maje
    <Entry>
      <ID>6</ID>
      <DefaultText>"Fammi vedere cos'hai."</DefaultText>
      <FemaleText />
    </Entry>
pl/text/conversations/09_port_maje
    <Entry>
      <ID>6</ID>
      <DefaultText>„Pokaż, co masz na sprzedaż”.</DefaultText>
      <FemaleText />
    </Entry>
pt/text/conversations/09_port_maje
    <Entry>
      <ID>6</ID>
      <DefaultText>"Vamos ver o que você tem aí."</DefaultText>
      <FemaleText />
    </Entry>
ru/text/conversations/09_port_maje
    <Entry>
      <ID>6</ID>
      <DefaultText>"Покажи, что у тебя есть".</DefaultText>
      <FemaleText />
    </Entry>
zh/text/conversations/09_port_maje
    <Entry>
      <ID>6</ID>
      <DefaultText>“让我看看你都有什么好东西吧。”</DefaultText>
      <FemaleText />
    </Entry>
 
Obviously without my existing / added markers and not dupicating #72
 
If we repeat this process for all languages using their own versions of exported/localised/[lang]/text/conversations/09_bs_fishmonger.stringtable we have a fully translated string in #pos 106
 
Now let's create some original text which is a good reason for me to watch Python's Parrot sketch  :)
 
I've settled on "Have you got a Norwegian Blue?" - this only makes sense if you understand the joke and will result in the gifting of TT1's Dead Parrot (as presented you can spam DP - there are ways around this I'll explain if anyone wants but as this is a complex subject involving Globals I'm skipping that for this one)
 
So - lets start off patching that into our stringtable at #107
 
Similarly to above we want a new entry with a new ID
 
    <Entry>
      <ID>107</ID>
      <DefaultText>"Have you got a Norwegian Blue?"</DefaultText>
      <FemaleText />
    </Entry>
 
This needs to keep our stringtable valid so again needs to go before the </Entries> and we need to update <EntryCount>71</EntryCount> to 73 and save the file.
 
We now repeat this process on all other translations
 
I'll use Google Translate to so them - it's not going to be perfect but until we get some translators available at least we have SOMETHING - it's better than making someone read a language they don't understand.
 
I get - any translation errors, blame Google
 
de - Hast du ein Norwegisches Blau?
es - ¿Tienes un azul noruego?
en - <We're translating from this one>
fr - Avez-vous un bleu norvégien?
it - Hai un blu norvegese?
pl - Czy masz norweskiego niebieskiego?
pt - Você tem um azul norueguês?
ru - У вас есть норвежский синий?
zh - 你有挪威蓝吗?
 
Note that my zh is assuming its Simple Chinese
 
Apologies to my friends who's native language isn't English, I'm fully aware that the translation may be garbage but the point of this is not for release as a MOD so I'm not that concerned if the translations are bad. The purpose of this is to educate, not teach language skills.
 
Right - armed with our translations we can now Mod all the StringTables
 
We've finally got to a stage of nothing happening but where we can make the changes we want
 
Yeah - we're still at a point of no results for all this work - nobody ever said Modding was easy
 
The next section makes stuff happen - that's the payoff we're all after
 
It's also the most likely place to completely screw everything up
 
If you've followed everything accurately it's time for the deep, dark development hell of putting some new content in place. You'll find by experience 90% of any dev is doing the mundane stuff we've discussed so far - it takes about 10% of the time (a famous 'law') - the next bit takes 90% of the time but results in 10% of the goal. I've been programming for > 35 years so I'm used to it...
 
The grin you get when you get payback makes it all worthwhile.
 
When I finally see Waenglith asking me if I wanna buy something or if I want a Norwegian Blue... I can't express the satisfaction you feel adequately - it's way out there, a Eureka moment (experienced Devs will get what I mean - TT1 - how cool did it feel getting the burn on DP? I know it thrilled me when I made that breakthrough - I'd spent 1/2 a day getting nowhere then I did traps <G>)
 
So cool...
 
The next stage puts me firmly into the 10% for 90% part - I'll do my utmost to get this out today but the 90% wall is about to hit. Hopefully this won't be a nightmare as I've modded her before so know what to look for
 
[@peardox takes an hour or two off to do this and chat to the family]
 
[@peardox takes an hour off off to do this and chat to the family]

Attached Files


Edited by peardox, 16 August 2018 - 06:21 AM.


#63
peardox

peardox

    (5) Thaumaturgist

  • Members
  • 564 posts
  • Location:Manchester, UK
  • Deadfire Backer

Part 3 (Merged)

 

There will be one more short part to this stuff and I'll include a copy of the finished Mod for you to play around with
 
We've still done nothing that changes the game - let's do something about that!
 
As I said right at the start we're now going to alter, fundimentally, how the game works. There is only one way to do this, and yes, I've explored every override way I can think of (instructions are bugged)
 
What we're going to do next is NOT for release as a MOD - it is, however, an extremely useful experiment for us Modders
 
In your mod directory create conversations/09_port_maje/09_cv_dawnstars_priestess.conversationbundle
 
Note that this goes at the same directory level as design and localized - it does NOT belong in design (as you may expect)
 
Now go through Waenglith's Questions - you're looking for one with "Farewell." in the list - there are two ways to get to this depenfing on whether you've latkked to her before
 
Referencing this text against 09_cv_dawnstars_priestess.stringtable you can see it's ID 24
 
We're looking for "NodeID": 24, as that's where we're going to patch in a Shop + Parrot
 
If you don't want to use Dead Parrot use anything else e.g. ITEM_PET_FlameNagaHatchling is 123bfda8-0639-4a68-bb59-3107a0e692d3
 
Lets fund "NodeID": 24,
 
You'll see we have
================================================================
{
"$type": "OEIFormats.FlowCharts.Conversations.PlayerResponseNode, OEIFormats",
"NotSkippable": false,
"IsQuestionNode": false,
"HideSpeaker": false,
"IsTempText": false,
"PlayVOAs3DSound": false,
"PlayType": 0,
"Persistence": 3,
"NoPlayRandomWeight": 0,
"VOPositioning": 0,
"DisplayType": 1,
"NodeID": 24,
"ContainerNodeID": -1,
"Links": [],
"ClassExtender": {
"ExtendedProperties": [
"SpeakerAnimation,0",
"ListenerAnimation,0",
"DoNotClearText,False",
"FocusedSpeaker,",
"VOEventOverride,None"
]
},
"Conditionals": {
"Operator": 0,
"Components": []
},
"OnEnterScripts": [],
"OnExitScripts": [],
"OnUpdateScripts": []
},
 

 

================================================================
Copy that node
 
Now, we need to insert our new nodes, these relate directly to our altered StringTable
 
You'll remember the node before our new ones was 72
 
Search fpr "NodeID": 72, then look for the end of that object
 
It's followed by
 
================================================================
{
"$type": "OEIFormats.FlowCharts.Conversations.ScriptNode, OEIFormats",
"RequiresValidChildNode": false,
================================================================
 
After Node 72's closing }, paste node #24 in twice
 
For our fresh nodes we want to change "NodeID": 24, to 106 + 107 as they pick the text up from our StringTable
 
We've now got two dead nodes that will result in a dialogue option then quit (that's why we took links out)
 
This has created an unused two convo nodes - let's go activate them
 
Search for "ToNodeID": 24,
 
We're going to pit out new nodes in directly before the farewell node (#24) - there are two places this needs to be done as node #24 is part of two dialogue trees so we may as well do them both
 
The section with the "ToNodeID": 24 looks like this
 
================================================================
{
"$type": "OEIFormats.FlowCharts.Conversations.DialogueLink, OEIFormats",
"RandomWeight": 1,
"PlayQuestionNodeVO": true,
"QuestionNodeTextDisplay": 0,
"FromNodeID": 3,
"ToNodeID": 24,
"PointsToGhost": false,
"Conditionals": {
"Operator": 0,
"Components": []
},
"ClassExtender": {
"ExtendedProperties": []
}
}
================================================================
 
Paste in the above twice and add a comma to the after the last } in each new object
 
We're looking to have this inserted
 
================================================================
{
"$type": "OEIFormats.FlowCharts.Conversations.DialogueLink, OEIFormats",
"RandomWeight": 1,
"PlayQuestionNodeVO": true,
"QuestionNodeTextDisplay": 0,
"FromNodeID": 3,
"ToNodeID": 106,
"PointsToGhost": false,
"Conditionals": {
"Operator": 0,
"Components": []
},
"ClassExtender": {
"ExtendedProperties": []
}
},
{
"$type": "OEIFormats.FlowCharts.Conversations.DialogueLink, OEIFormats",
"RandomWeight": 1,
"PlayQuestionNodeVO": true,
"QuestionNodeTextDisplay": 0,
"FromNodeID": 3,
"ToNodeID": 107,
"PointsToGhost": false,
"Conditionals": {
"Operator": 0,
"Components": []
},
"ClassExtender": {
"ExtendedProperties": []
}
},
================================================================
 
Repeat this for the other "ToNodeID": 24, - make sure you're not doing the same one!
 
Save this, make sure you're completely out of POE2 - not at menu, at Desktop
 
Start up POE2 with your new mod and go see Waenglith - you should have the two new questions in the conversation (they'll just exit at the moment)
 
Next session (last one, and it's nice + short) I'll show you how to make these dead nodes do something cool


#64
peardox

peardox

    (5) Thaumaturgist

  • Members
  • 564 posts
  • Location:Manchester, UK
  • Deadfire Backer
Last Part (Merged)
 
OK
 
The final payoff...
 
If Part 3 worked for you you're almost done
 
All we need to do is add some scripting to then
 
Search for "NodeID": 106,
 
You'll see a line that says simply...
 
"OnExitScripts": [],
 
This is our does nothing show me a shop (it's the FishMonger's)
 
Change it to this...
 
            "OnExitScripts": [                
                
{
                    "Data": {
                        "FullName": "Void OpenStore(Guid)",
                        "Parameters": [
                            "2c8238c9-99ae-45d3-9d6e-f795c688fd1d"
                        ],
                        "Flags": "",
                        "UnrealCall": "",
                        "FunctionHash": 215165789,
                        "ParameterHash": -391774516
                    },
                    "Conditional": {
                        "Operator": 0,
                        "Components": []
                    }
                }
            ],

Now lots go TT1's Dead Parrot so just below this one is 107 which we want to change to...

            "OnExitScripts": [                {
                    "Data": {
                        "FullName": "Void GiveItems(Guid, Int32)",
                        "Parameters": [
                            "ff10c221-f081-465f-adef-082978010630",
                            "1"
                        ],
                        "Flags": "",
                        "UnrealCall": "",
                        "FunctionHash": 0,
                        "ParameterHash": 0
                    },
                    "Conditional": {
                        "Operator": 0,
                        "Components": []
                    }
                }
            ],

You can change ff10c221-f081-465f-adef-082978010630 to something else if you ain't got TT1's Parrot Mod installed e.g. ITEM_PET_FlameNagaHatchling is 123bfda8-0639-4a68-bb59-3107a0e692d3

 

You can make that anything you want that's a valid item

 

Make sure you're completely out of Deadfire (on Desktop) - start the game back up and Waenglith will now sell you fish and give you unlimited free Dead Parrots

 

Attached are convo.zip which is the finished mod and blank.zip which is a load of empty folders to make creating new mods easy (as it can take a while to get the dir structure correct)

 

Attached Files



#65
peardox

peardox

    (5) Thaumaturgist

  • Members
  • 564 posts
  • Location:Manchester, UK
  • Deadfire Backer
For this one we're going to change the FireBall
 
At the moment last_mod gives you 8 charges of FireBall, once they're gone they're gone
 
@House2fly's idea of changing this to PerEncounter seemed a good idea so this version gives you two FireBalls you can use every fight
 
This one is the basis of advanced modding, here we introduce you to ItemMods and Abilities (both are required for this to work)
 
What we're going to do is take the original Of_Fireballs (0a8eef84-45a5-43d9-b49f-c872d5ad92dd) and Of_fireballs_Ability (fcef4fde-8d97-40ad-9eb5-99e7e863fdb2)
 
These can be found in exported/design/gamedata/ .... items.gamedatabundle and abilities.gamedatabundle and create new versions of these with different IDs
 
We'll simply tag "_2" onto the DegugName and give them new ID's then we're going to change the EquippableComponent -> ItemModIDs and replace the original 0a8eef84-45a5-43d9-b49f-c872d5ad92dd to our new ID which is fc126989-a5e6-48da-b1db-32f7fff3f87d
 
We also have to change the AbilitiesOnEquipIDs of our copied ItemMod to
"AbilitiesOnEquipIDs": [
"fc126989-a5e6-48da-b1db-32f7fff3f87e"
]
 
This references out new ability, this is in fact the only alteration we're going to make to the ItemMod
 
In the 'borrowed' GenericAbility we're only going to change two lines anding up with ...
 
"UsageType": "PerEncounter",
"UsageValue": 2,
 
These are the only changes required to convert Of FireBall into our modified version
 
We simply need to add two add two new components to re-mod First_Mod to do this
 
Find somewhere with a }, { bit and replace it with this lot...
 
		   },{
				"$type": "Game.GameData.ItemModGameData, Assembly-CSharp",
				"DebugName": "Of_Fireballs_2",
				"ID": "fc126989-a5e6-48da-b1db-32f7fff3f87d",
				"Components": [
					{
						"$type": "Game.GameData.ItemModComponent, Assembly-CSharp",
						"DisplayName": 163,
						"HideFromUI": "false",
						"EnchantCategory": "None",
						"Cost": 2,
						"DisplayEvenIfCostZero": "false",
						"CursesItem": "false",
						"StatusEffectsOnEquipIDs": [],
						"StatusEffectsOnLaunchIDs": [],
						"StatusEffectsOnAttackIDs": [],
						"AbilityModsOnEquipIDs": [],
						"OnEquipVisualEffects": [],
						"DamageProcs": [],
						"AbilitiesOnEquipIDs": [
							"fc126989-a5e6-48da-b1db-32f7fff3f87e"
						]
					}
				]
			}, {
				"$type": "Game.GameData.GenericAbilityGameData, Assembly-CSharp",
				"DebugName": "Of_fireballs_Ability_2",
				"ID": "fc126989-a5e6-48da-b1db-32f7fff3f87e",
				"Components": [
					{
						"$type": "Game.GameData.GenericAbilityComponent, Assembly-CSharp",
						"KeywordsIDs": [
							"f0dbb330-1b06-4175-8ce4-efe790b99213",
							"3f075d80-787a-493e-bbaa-6da3d6dc2d0f",
							"054ca597-f957-4549-aa74-a34791938f6f"
						],
						"DisplayName": 191,
						"Description": 276,
						"UpgradeDescriptions": [],
						"UpgradedFromID": "00000000-0000-0000-0000-000000000000",
						"Vocalization": "GenericSpellCast5",
						"Icon": "gui\/icons\/abilities\/wizard\/fireball.png",
						"UsageType": "PerEncounter",
						"UsageValue": 2,
						"AbilityClassID": "00000000-0000-0000-0000-000000000000",
						"AbilityLevel": 3,
						"IsPassive": "false",
						"StackingRuleOverride": "Default",
						"TriggerOnHit": "false",
						"IsModal": "false",
						"ModalGroupID": "00000000-0000-0000-0000-000000000000",
						"IsCombatOnly": "true",
						"IsNonCombatOnly": "false",
						"HideFromUI": "false",
						"HideFromCombatLog": "false",
						"UniqueSet": "None",
						"NoiseLevelID": "6bfdad12-a1d0-42cc-b797-c9d2dac2af05",
						"DurationOverride": 0,
						"OverrideEmpower": "Default",
						"ClearsOnMovement": "false",
						"CannotActivateWhileInStealth": "false",
						"CannotActivateWhileInvisible": "false",
						"ActivationPrerequisites": {
							"Conditional": {
								"Operator": 0,
								"Components": []
							}
						},
						"ApplicationPrerequisites": {
							"Conditional": {
								"Operator": 0,
								"Components": []
							}
						},
						"DeactivationPrerequisites": {
							"Conditional": {
								"Operator": 0,
								"Components": []
							}
						},
						"PowerLevelScaling": {
							"ScalingType": "Default",
							"BaseLevel": 0,
							"LevelIncrement": 1,
							"MaxLevel": 0,
							"DamageAdjustment": 1,
							"DurationAdjustment": 1,
							"BounceCountAdjustment": 0,
							"ProjectileCountAdjustment": 0,
							"AccuracyAdjustment": 0,
							"PenetrationAdjustment": 0
						},
						"StatusEffectKeywordsIDs": [],
						"StatusEffectsIDs": [],
						"VisualEffects": [],
						"SelfMaterialReplacementID": "00000000-0000-0000-0000-000000000000",
						"AttackID": "5bc9f76b-2113-409f-81c0-5096e66974be",
						"AITargetingConditional": {
							"Conditional": {
								"Operator": 0,
								"Components": []
							},
							"Scripts": []
						},
						"AudioEventListID": "822d2783-793a-42cc-b9ee-1907ec7343cc"
					},
					{
						"$type": "Game.GameData.ProgressionUnlockableComponent, Assembly-CSharp"
					}
				]
			}, {

 
Finally find Of_Fireballs
    "ItemModsIDs": ["0a8eef84-45a5-43d9-b49f-c872d5ad92dd", 
 
And replace it with Of_Fireballs_2
    "ItemModsIDs": ["fc126989-a5e6-48da-b1db-32f7fff3f87d", 
 
A lot of the both changes we've left untouched from the originals but need including

We end up with this...

first_mod_6.png
 
You'll notice that Fireball is now twice per encounter
 
Attached is the final result

Attached Files


  • Grape_You_In_The_Mouth likes this

#66
peardox

peardox

    (5) Thaumaturgist

  • Members
  • 564 posts
  • Location:Manchester, UK
  • Deadfire Backer

Rats - another month with no more new updates (soz)

 

Concentrating on 2.1.0

 

Will do another Tutorial over the w/e to show you a summon (this will be cool)

 

PROMISE this time (very busy)



#67
peardox

peardox

    (5) Thaumaturgist

  • Members
  • 564 posts
  • Location:Manchester, UK
  • Deadfire Backer

I apologise

 

Midnight Sunday and I'm having issues with GenerateLootListInto

 

My intention was to show you this new technique

 

It works but I'm gonna have to do a ground-buildup to get this one working first



#68
peardox

peardox

    (5) Thaumaturgist

  • Members
  • 564 posts
  • Location:Manchester, UK
  • Deadfire Backer

Rats

 

I've worked out what's wrong

 

SaveGames again...

 

Attatched is my latest build which has First Mod and The Pantry

 

What we're illustrating here is adding multiple lootlists to one NPC

 

[A personal note] Yep, I write all these by myself so why do I write these as "we"? Simple answer, I'm not the only bloke(ess) involved in these Tutorials
I get a HUGE amount of help from our 34 member Slack team - members translate into languages the Mod Author doesn't know, create art, write imaginitive text, advise and test for us
I'm not a one man band - I'm a 34 member band!

All we're done in this Mod is change the vendor to FishMonger in Port Maje - stuck two lootlists in one mod and added a view controller (techie crap that means what you see) - that's in lootlist.gamedatabundle
 
If you start a new game you get the mod
 
If you talk to FishMonger - tough
 
I hoped to make this one positive but sadly ModScriptHook appears to hit cache
 
I HOPE that in 2.1.1 SaveGames simply ignore and ModScriptHook (@BMac)
 
This is a fully functioning Mod but I feel little requirement to explain it (there's one UUID change)
 
This is a full copy of The Pantry (so remove it if you have it installed) with a changed First Sword

Attached Files


Edited by peardox, 16 September 2018 - 04:14 PM.





0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users