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!

First Mod (spoilers)

67 replies to this topic

#41 Kexby Posted 01 August 2018 - 06:09 PM

Kexby

(2) Evoker

• Members
• 72 posts
• Location:Australia

Heheh I've just tested it again.

This is insanely fun, it's a total cheat! I'm having a blast (literally ).

There is just one final step I'd like to do. At the moment, it still has the original Additional Effects:

Inaccurate: -10 Ranged Accuracy

Fine: +15% Damage, +4 Accuracy, +1 Penetration

Explosive Shot: Basic attacks deal the best of Pierce or Slash damage in a small AoE

I'd like to keep Fine and Explosive Shot, but get rid of Inaccurate.

Are the 'Additional Effects' in this section of the code?

"ItemModsIDs": ["fea57a9e-7dc1-4f66-8617-1e2f87c0f376", "7d7b81f7-7322-441f-a366-5d15d30379f5", "2dcb5f72-2a69-45c6-a438-3e93a58459a5"],

If so, then I'm guessing that the first entry is for Inaccurate. If I simply delete that first ID, will it remove Inaccurate from my Blunderbuss?

Thank you all so much for your help. I'm almost done (I promise).

#42 house2fly Posted 01 August 2018 - 06:17 PM

house2fly

(8) Warlock

• Members
• 1163 posts
Yep, those are the additional effects. I'm not sure if they're in order, but you can search for the UUID in the game's items.gamedatabundle to confirm the name. there'll probably be a million entries so try ID": "[UUID]".

If you make a weapon or armour you can of course make enchantments as well, which is not really more advanced but requires a lot more copying and assigning new UUIDs. To make a new enchantments you need an itemmod which has an ability or a statuseffect which could require an attack, and maybe you want to make a recipe for it, etc

#43 Kexby Posted 01 August 2018 - 07:00 PM

Kexby

(2) Evoker

• Members
• 72 posts
• Location:Australia

Aha! Yep, I found it. The first ID is for Inaccurate, so I simply deleted it (which did the trick, my blunderbuss no longer has the Inaccurate modifier ).

Well, I actually think I'm finished with this mod. Yay for me! And BIG thank you's to everybody who helped. You guys are awesome!

Here's the final BadAss.gamedatabundle (if anybody is interested):

{
"GameDataObjects": [{
"$type": "Game.GameData.WeaponGameData, Assembly-CSharp", "DebugName": "Blunderbuss_U_BadAss", "ID": "ea4de19d-d80c-4e66-9e33-8818a1e038a3", "Components": [{ "$type": "Game.GameData.ItemComponent, Assembly-CSharp",
"DisplayName": 66650,
"DescriptionText": 66651,
"FilterType": "Weapons",
"InventoryAudioEventListID": "57518815-1aa8-49c2-8ee0-0d361b26fd66",
"IsQuestItem": "false",
"IsIngredient": "false",
"IsCurrency": "false",
"CanSellForFullValue": "false",
"MaxStackSize": 1,
"NeverDropAsLoot": "false",
"CanBePickpocketed": "true",
"IsUnique": "true",
"Value": 35,
"IconTextureSmall": "gui/icons/items/weapons/blunderbuss/blunderbuss_01_s.png",
"IconTextureLarge": "gui/icons/items/weapons/blunderbuss/blunderbuss_01_l.png",
"PencilSketchTexture": "",
"InspectOnUseButton": [],
"IsPlaceholder": "false"
}, {
"$type": "Game.GameData.EquippableComponent, Assembly-CSharp", "EquipmentType": "Blunderbuss", "EquipmentSlot": "AnyWeapon", "AppearancePiece": { "ModelVisualDataPath": "prefabs/items/appearance/weapons/blunderbuss/a_blunderbuss03_v01.asset" }, "ItemModsIDs": ["7d7b81f7-7322-441f-a366-5d15d30379f5", "2dcb5f72-2a69-45c6-a438-3e93a58459a5"], "OnEquipVisualEffects": [], "RestrictedToClass": [], "RestrictedToPlayer": "false", "ProficientAbilityID": "f5a2eb61-8c11-41ab-9832-5ad182e5b368", "CannotUnequip": "false", "ItemRendererPrefab": "prefabs/itemrenderers/genericanimateditemrenderer.prefab", "ItemModel": "", "AnimationController": "art/animation/animationcontrollers/weapon/w_pistol.controller", "PaperdollOverrideRenderer": "", "AttackSummonID": "00000000-0000-0000-0000-000000000000", "CannotSheathe": "false", "PropVisualEffects": [] }, { "$type": "Game.GameData.WeaponComponent, Assembly-CSharp",
"Stance": "OneHanded",
"AnimationStanceID": "ddeda306-872b-4d63-8032-fbaf359d0ed2",
"StatusEffectsOnLaunchIDs": [],
"IsDisplayedWhenAlternate": "true",
"IsUniversalType": "false",
"AttackID": "75e41a87-9eb2-4062-8127-f8f2b121a9e3",
"ForceBackScabbard": "false",
"ScabbardAppearancePiece": {
"ModelVisualDataPath": ""
},
"ScabbardRendererPrefab": "",
"ScabbardModel": "",
"AudioEventListID": "00000000-0000-0000-0000-000000000000"
}
]
},{
"$type": "Game.GameData.AttackFirearmGameData, Assembly-CSharp", "DebugName": "Blunderbuss_BadAss", "ID": "75e41a87-9eb2-4062-8127-f8f2b121a9e3", "Components": [{ "$type": "Game.GameData.AttackBaseComponent, Assembly-CSharp",
"KeywordsIDs": ["f25230f4-fca2-44af-b745-03f026152459", "1b6d77c8-1155-4d49-9c7c-548716f0d409"],
"AttackDistance": 88,
"MinAttackDistance": 0,
"AttackVariationID": "7da22f9e-cd53-4546-86cc-c2d150df72cb",
"CastSpeedID": "eacb53e3-6eb5-422a-92ca-99cc883ae4a9",
"RecoveryTimeID": "039ef4b4-eeb3-42d3-9817-a8df05c53515",
"ImpactDelay": 0,
"ForcedTarget": "None",
"AffectedTargetType": "All",
"AffectedTargetConditional": {
"Conditional": {
"Operator": 0,
"Components": []
}
},
"AffectedTargetDeathState": "Alive",
"HostilityOverride": "Default",
"PushDistance": 0,
"FaceTarget": "true",
"AccuracyBonus": 666,
"PenetrationRating": 666,
"DamageData": {
"DamageType": "Pierce",
"AlternateDamageType": "None",
"Minimum": 666,
"Maximum": 666,
"DamageProcs": []
},
"Require****Object": "true",
"StatusEffectKeywordsIDs": [],
"StatusEffectsIDs": [],
"RandomizeStatusEffect": "false",
"CanGraze": "false",
"CanCrit": "true",
"DefendedBy": "Deflect",
"AfflictionsDefendedBy": "None",
"AfflictionApplicationModifier": "None",
"SubstituteHitVisualEffect": "",
"VisualEffects": [{
"VisualEffect": "prefabs/effects/items/weapons/fx_action_flash_launch_01.prefab",
"AttachPoint": "Fx_Bone_02",
"AttachObject": "Caster",
"AttachMode": "Attach",
"MeshType": "None",
"Event": "OnAnimEvent",
"AnimEventID": 0,
"Loop": "false",
"Scale": "false"
}, {
"VisualEffect": "prefabs/effects/items/weapons/fx_muzzle_flash_launch_blunderbuss.prefab",
"AttachPoint": "Fx_Bone_01",
"AttachObject": "Caster",
"AttachMode": "PositionRotation",
"MeshType": "None",
"Event": "OnLaunch",
"AnimEventID": 0,
"Loop": "false",
"Scale": "false"
}, {
"VisualEffect": "prefabs/effects/items/weapons/fx_arquebus_smoke_linger.prefab",
"AttachPoint": "Fx_Bone_01",
"AttachObject": "Caster",
"AttachMode": "Attach",
"MeshType": "None",
"Event": "OnLaunch",
"AnimEventID": 0,
"Loop": "false",
"Scale": "false"
}
],
"AttackOnImpactID": "00000000-0000-0000-0000-000000000000",
"ExtraAttackID": "00000000-0000-0000-0000-000000000000",
"LaunchBone": "Fx_Bone_01",
"HitBone": "Chest",
"OnHitShakeDuration": "None",
"OnHitShakeStrength": "None",
"NoiseLevelID": "82bc1ce9-3a81-41ca-a61a-cc1f73a53de7",
"AllReactNoise": "false",
"InterruptsOn": "None",
"InterruptType": "Normal",
"TargetAngle": 0,
"ApplyOnceOnly": "false",
"PathsToTarget": "true",
"HideFromCombatLog": "false",
"DoesNotApplyDamage": "false",
"TreatAsWeapon": "false",
"BounceData": {
"Bounces": 0,
"Multiplier": 0.5,
"Range": 4,
"InRangeOrder": "true",
"NoRepeatTargets": "false",
"AlwaysBounceAtEnemies": "true",
"Delay": 0
}
}, {
"$type": "Game.GameData.AttackRangedComponent, Assembly-CSharp", "LaunchAttackOnCollision": "false", "ProjectileCount": 4, "IgnoreMagicDefense": "false", "ProjectileConeAngle": 11, "ProjectilePrefab": "prefabs/projectiles/invisible_projectile.prefab", "IsMultiHit": "false", "MultiHitTravelDist": 88, "MultiHitMaxHits": 0, "LaunchSource": "Caster", "LaunchOffset": { "x": 0, "y": 0, "z": 0 }, "LaunchOffsetRandom": { "x": 0, "y": 0, "z": 0 } }, { "$type": "Game.GameData.AttackFirearmComponent, Assembly-CSharp",
"ClipSize": 4,
"FirearmType": "Pistol"
}
]
},  {
"$type": "Game.GameData.AttackAOEGameData, Assembly-CSharp", "DebugName": "Blunderbuss_BadAss_AoE", "ID": "dbb0a8d7-d06f-4d99-b396-30470f5b74b1", "Components": [{ "$type": "Game.GameData.AttackBaseComponent, Assembly-CSharp",
"KeywordsIDs": ["f25230f4-fca2-44af-b745-03f026152459", "1b6d77c8-1155-4d49-9c7c-548716f0d409"],
"AttackDistance": 88,
"MinAttackDistance": 0,
"AttackVariationID": "35abdf41-fc3f-4310-8d5d-5d7da644affc",
"CastSpeedID": "eacb53e3-6eb5-422a-92ca-99cc883ae4a9",
"RecoveryTimeID": "566840d9-1561-4243-8ca7-889df9869847",
"ImpactDelay": 0,
"ForcedTarget": "None",
"AffectedTargetType": "Hostile",
"AffectedTargetConditional": {
"Conditional": {
"Operator": 0,
"Components": []
}
},
"AffectedTargetDeathState": "Alive",
"HostilityOverride": "Default",
"PushDistance": 0,
"FaceTarget": "false",
"AccuracyBonus": 666,
"PenetrationRating": 666,
"DamageData": {
"DamageType": "Pierce",
"AlternateDamageType": "Slash",
"Minimum": 666,
"Maximum": 666,
"DamageProcs": []
},
"Require****Object": "false",
"StatusEffectKeywordsIDs": [],
"StatusEffectsIDs": [],
"RandomizeStatusEffect": "false",
"CanGraze": "false",
"CanCrit": "true",
"DefendedBy": "Reflex",
"AfflictionsDefendedBy": "None",
"AfflictionApplicationModifier": "None",
"SubstituteHitVisualEffect": "",
"VisualEffects": [],
"AttackOnImpactID": "00000000-0000-0000-0000-000000000000",
"ExtraAttackID": "00000000-0000-0000-0000-000000000000",
"LaunchBone": "RightWeapon",
"HitBone": "Chest",
"OnHitShakeDuration": "None",
"OnHitShakeStrength": "None",
"NoiseLevelID": "15743f94-1026-40b0-8e13-a667b3f66f63",
"AllReactNoise": "false",
"InterruptsOn": "None",
"InterruptType": "Normal",
"TargetAngle": 0,
"ApplyOnceOnly": "false",
"PathsToTarget": "true",
"HideFromCombatLog": "false",
"DoesNotApplyDamage": "false",
"TreatAsWeapon": "false",
"BounceData": {
"Bounces": 0,
"Multiplier": 0.5,
"Range": 10,
"InRangeOrder": "false",
"NoRepeatTargets": "false",
"AlwaysBounceAtEnemies": "false",
"Delay": 0
}
}, {
"$type": "Game.GameData.AttackAOEComponent, Assembly-CSharp", "BlastSize": "Large", "BlastRadiusOverride": 5, "DamageAngle": 360, "ExcludePrimaryTarget": "true", "IgnoreParentTarget": "true", "ExcludeSelf": "false", "BlastPhysicsForce": 500, "PushFromCaster": "false" }, { "$type": "Game.GameData.AttackRangedComponent, Assembly-CSharp",
"LaunchAttackOnCollision": "false",
"ProjectileCount": 1,
"IgnoreMagicDefense": "true",
"ProjectileConeAngle": 145,
"ProjectilePrefab": "prefabs/projectiles/invisible_projectile.prefab",
"IsMultiHit": "false",
"MultiHitTravelDist": 88,
"MultiHitMaxHits": 0,
"LaunchSource": "Caster",
"LaunchOffset": {
"x": 0,
"y": 0,
"z": 0
},
"LaunchOffsetRandom": {
"x": 0,
"y": 0,
"z": 0
}
}
]
}
]
}



I'm not sure if anybody wants an overpowered cheating blunderbuss, but should I upload it to Nexus? I'm just thinking it might help other newbie modders to see what I've done (cause studying other people's mods is a really big help when you're trying to learn).

I'd really like to attach it to this post, but I get this message:

Error You aren't permitted to upload this kind of file

I'm guessing this is because I'm new around here and don't have enough posting privileges yet .

Edited by Kexby, 01 August 2018 - 07:08 PM.

• kilay likes this

#44 kilay Posted 01 August 2018 - 07:09 PM

kilay

(5) Thaumaturgist

• Members
• 524 posts

Aha! Yep, I found it. The first ID is for Inaccurate, so I simply deleted it (which did the trick, my blunderbuss no longer has the Inaccurate modifier ).

Well, I actually think I'm finished with this mod. Yay for me! And BIG thank you's to everybody who helped. You guys are awesome!

I'm not sure if anybody wants an overpowered cheating blunderbuss, but should I upload it to Nexus? I'm just thinking it might help other newbie modders to see what I've done (cause studying other people's mods is a really big help when you're trying to learn).

Now that you've understood the basic maybe you could refine your Blunderbuss Badass with a proper damage, other status effects and what you like. So people will have more interest to download it. 666 of damage and 88 of range is really too much. Add some visual effects to your weapon could be another good idea (there are lot of them).

Even you should get rid of the stringtables giving it proper name and some lore, checking in game that all is working properly.
But for that is better talk in other place (Slack or PM) without flood this thread.

Glad you sort out. Keep on it.

Edited by kilay, 01 August 2018 - 07:18 PM.

#45 Kexby Posted 01 August 2018 - 07:20 PM

Kexby

(2) Evoker

• Members
• 72 posts
• Location:Australia

You're right Kilay, I shouldn't have flooded Peardox's thread (I'm sorry Peardox).

I just thought, if I posted my progress here on the official forum (instead of on Slack), then other beginners could follow it and hopefully learn something from it.

But I think I'll use Slack from now on (I just need to get the hang of using it ).

#46 peardox Posted 01 August 2018 - 07:25 PM

peardox

(5) Thaumaturgist

• Members
• 564 posts
• Location:Manchester, UK

I'm glad you liked it @Kexby

@Kilay (I think) expressed an interest in interest in expanding the Mod tutorials

I completely agree with him

Feel free to grab any of us in Slack

Here's @Kilay's PM to me

hey peardox , are you planning to make other tutorials? cuz i have in mind to make something more detailed about items (with itemmods, status effect, various attacks etc) (edited)

The answer is yep but I'm really busy on other crap

This appears a good learning curve for both you + @housefly to educate both yourselves and others

Ideally I'd like you on a shared project with an experienced member - @kilay, @tt1, @spherikal, @Ethics Gradiant, @Xarastras for example (I'd do it if everyone else is busy - I'm busier)

If you can't find one of the core PM me and I'll do a #mod-dev with you guys / guyesses

If you can't find me email me @ simon@peardox.com

• Kexby likes this

#47 Kexby Posted 01 August 2018 - 08:49 PM

Kexby

(2) Evoker

• Members
• 72 posts
• Location:Australia

I'm glad you liked it @Kexby

@Kilay (I think) expressed an interest in interest in expanding the Mod tutorials

I completely agree with him

Feel free to grab any of us in Slack

Here's @Kilay's PM to me

hey peardox , are you planning to make other tutorials? cuz i have in mind to make something more detailed about items (with itemmods, status effect, various attacks etc) (edited)

The answer is yep but I'm really busy on other crap

This appears a good learning curve for both you + @housefly to educate both yourselves and others

Ideally I'd like you on a shared project with an experienced member - @kilay, @tt1, @spherikal, @Ethics Gradiant, @Xarastras for example (I'd do it if everyone else is busy - I'm busier)

If you can't find one of the core PM me and I'll do a #mod-dev with you guys / guyesses

If you can't find me email me @ simon@peardox.com

That would be fantastic! We definitely need more tutorials.

I really hope Kilay gets time to expand this tutorial, cause I'd love to take my mod even further and really make it unique .

Once I have more experience and know what the heck I'm doing, then writing tutorials is something I really enjoy doing (I love to teach). And I like to share what I've learned with others (it actually helps me to learn if I write it all out).

I just need to figure out how to use Slack (it's a bit complicated ).

Edited by Kexby, 01 August 2018 - 08:53 PM.

#48 peardox Posted 01 August 2018 - 09:40 PM

peardox

(5) Thaumaturgist

• Members
• 564 posts
• Location:Manchester, UK

Don't worry @Kexby

We'll teach you Slack as you go - our intend is to educate and aid each other - your wishes coincide with our own

@Kilay is one of my best to tutor you on item-mod, statuseffects and abilities (maybe witha little @tt1)

If you can then write a tutorial expanding on my Sticky (First Mod) no one will be happier than myself and the gang

I should note that @kilay in on a flowcharting project ATM

This is part of a documentation library we're building

Everyone needs a day off

Hit us on Slack and we'll hook you up with a decent tutor

Do this QUICKLY as both myself and @Kilay are considering expending my sticky

#49 peardox Posted 02 August 2018 - 06:40 AM

peardox

(5) Thaumaturgist

• Members
• 564 posts
• Location:Manchester, UK
I was recently asked about commenting mods by @tonpix and it's obvious that particularly in tutorials this is desirable

So here are our findings

If you wanna comment yur mod you HAVE to use decompressed JSON / XML - a gamedatabundle is compressed JSON which explains why this ain't reliable on that kind of file

If everything is on one line this WON'T work 100%

Most modders use 'prettified' JSON. This increases filesize a bit but makes for easy maintenance.

We've got some new more advanced tutorials planned by members of our team so I'm advising commenting for those

OK - here we go...

I'm using Convo Mod (final) as a testbed

Let's Start off with 09_cv_dawnstars_priestess.conversationbundle

This file is JSON so uses CStyle comments

Here's a modified code snippet
=============================================
{"Conversations": [
{
"ID": "b598ec6e-0c75-448d-9852-ea05530df607",
/*

This is my Waenglith convo mod

Go read the forum post

*/
"Filename": "Conversations/09_Port_Maje/09_cv_Dawnstars_Priestess.conversation",
"ConversationScriptNode": { // This is another comment
"RequiresValidChildNode": false,
"NotSkippable": false,
"IsQuestionNode": false,
"HideSpeaker": false,
=============================================

You'll notice the /* .... */ section. This is a multi-line comment. Such sections are to explain what you're doing

You'll also notice a // bit. This is a single line comment (which is fine in fully formatted JSON etc but will break compressed JSON

The other Mod filetype is XML (DOMStyle) such as 09_cv_dawnstars_priestess.stringtable

Here I'm going to comment an added string...

=============================================
<!--
Add a question we can trigger later
-->
<Entry>
<ID>106</ID>
<DefaultText>"Let me see what you have."</DefaultText>
<FemaleText />
</Entry>
=============================================

This is a different style of commenting explicit to DOM-based coding (HTML and XML being examples)

The <!-- .... --> is a comment in this case

We've tried many tests on commented code and every one passes our tests

These constructs allow us to explain in code what we're doing

I'm recommending our group comment their code whether a published mod or tutorial to help the newbie see what we're doing and why

=============================================

Edited by peardox, 02 August 2018 - 06:41 AM.

• kilay and Kexby like this

#50 Kexby Posted 02 August 2018 - 05:19 PM

Kexby

(2) Evoker

• Members
• 72 posts
• Location:Australia

That will be a huge help Peardox. Let's see if I've got this right.

// This is a single line comment

/*

This is a multi line comment

that uses more than one line

*/

You said the // single line comments could break some code types. So would it be better to just use /*  */ for all comments, single and multi?

#51 maplejar Posted 02 August 2018 - 09:57 PM

maplejar

(1) Prestidigitator

• Members
• 10 posts
• Location:Charlotte, NC

This is really comfortable to check gamedatabundle , before you need to convert the bundle in json format with some plugin ( I use JSTool )

I highly recommend writing code in Visual Studio Code (https://code.visualstudio.com/). I didn't know jack about JSON when I first starting writing POE2 mods, and I was using notepad++ then as well. However, on one of the dev tutorials here they said they were using it so I thought I'd give it a try. It runs way faster than notepad++ does, at least for me, when loading one of the big gamedatabundle files. It "prettifies" them very quickly as well. But the big bonus for me, in learning JSON, is that it automatically underlines mistaken commas, braces, and brackets for you to show you any errors in your syntax. It's helped me out a lot.

You can tell Visual Studio Code that the file you're working in is JSON by clicking in the lower right, which perhaps it will initially say "plain text" and selecting JSON. You can also make it automatically associate JSON as being the language for gamedatabundle files by going to File / Preferences / Settings and entering the following in the right side column under "User Settings":

{
"git.ignoreMissingGitWarning": true,
"files.associations": {
"*.gamedatabundle": "json"
}
}


Anyway, just my two cents. I love notepad++ as well, but using Visual Studio Code helped this JSON newbie learn quicker and recognize mistakes more easily.

Edited by maplejar, 02 August 2018 - 10:08 PM.

• BMac, kilay and Kexby like this

#52 Kexby Posted 02 August 2018 - 11:35 PM

Kexby

(2) Evoker

• Members
• 72 posts
• Location:Australia

Thank you so much Maplejar, I'll definitely look into this. Anything that can point out my mistakes would be a real blessing .

• maplejar likes this

#53 peardox Posted 03 August 2018 - 11:03 AM

peardox

(5) Thaumaturgist

• Members
• 564 posts
• Location:Manchester, UK

@maplejar is in the process of joining our Slack

@kexby - in Slack go into #mod-dev to keep the flood out of #general then simply mention someone helpful (gave you some pointers in a PM) so something like...

@peardox trying to do an itemmod - care to help me out?

Replace me with ppl actually online (broken Internet ATM)

Actually #mod-dev is in use a lot ATM so think I'll create a #mod-dev2 and invite everyone so we've got enough space for multiple mod discussions

Hope you're getting the hang of the place @tonpix is doing some instructional stuff. Do you mind if I PM yesterday's PM to him? It describes perfectly the kinda issues new Slack members have

#54 peardox Posted 12 August 2018 - 06:57 AM

peardox

(5) Thaumaturgist

• Members
• 564 posts
• Location:Manchester, UK
Not done one of these for a while and it's been requested that we add more content so thought today we'd give you an easy upgrade to First Mod Great Sword

This is an expansion of First Mod Great Sword

We're going to keep the last version of this item but make it more poweful

What we're going to do here is add something called an ItemMod to our copy of Great Sword

Check design/gamedata/first_mod.gamedatabundle

Here you'll find a section marked "Game.GameData.EquippableComponent"

We're going to add out ItemMod to this part

Slightly after than bit you'll see "ItemModsIDs": [],

Notice the brackets - we can add as many ItemMods to this weapon as we like.

Your first port of call is exported\localized\en\text\game\itemmods.stringtable - there 1,055 of them to pick from

Ooh - Of Fireballs sounds good

<Entry>
<ID>163</ID>
<DefaultText>Of Fireballs</DefaultText>
<FemaleText />
</Entry>

Lets go find the ID for it

    {
"$type": "Game.GameData.ItemModGameData, Assembly-CSharp", "DebugName": "Of_Fireballs", "ID": "0a8eef84-45a5-43d9-b49f-c872d5ad92dd", "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": [
]
}
]
}



Let's add that to our sword in our Game.GameData.EquippableComponent

Save your new version and go buy it from the FishMonger in Port Maje if you ain't already got one (it should upgrade the weapon if you've already got one)

We can see a load of similar enhancements if we check both files

Let's go crazy! These are random picks, not creating anything specific here...

"83bfd3e9-6de8-45c4-a47c-5055b1bae67b",
"552de71d-6272-40c5-8fdd-dc8ac7d2fb7c"],

So there we have it - one powerful sword

You MAY need to cheat yourself some cash as the thing is expensive now!

We explained how to do this above but will re-iterate here

Type  (a backtick)
Type iroll20s (enable cheats)
Type  (a backtick)
Type GiveMoney 1000000 (we're now rich)

The use of cheats is required when developing a mod

You can use GiveItem fe314613-c507-4f86-86d2-dd94b09429e0 to give yourself the First Mod Great Sword for example - no need to arrach it to a vendor while developing the thing

This is the start of the more advanced modding stuff. Next time I'll show you how to write your own ItemMod

@Kilay - thought you were gonna write some of these?

Oops - attach the Mod (idiot)

Attached Files

Edited by peardox, 12 August 2018 - 07:25 AM.

• kilay likes this

#55 peardox Posted 12 August 2018 - 07:37 AM

peardox

(5) Thaumaturgist

• Members
• 564 posts
• Location:Manchester, UK

Oh yeah - the legal stuff

Do what you want with first_mod.zip

PLEASE change the vendor, I use her for tutorials other than that - no real reqs

IF you use the same vendor I use for this thread it can cause issues with the game (it's called a race condition)

All information published in this thread is educational and all work on it has been freely supplied as a community effort to help new modders.

It may not look like it but this stuff is not just my work - there are many contributors - mostly translation and art in my case

If you check out the convo mod threads (I'll have to merge them with this now we're sticky) many people contributed to that one

We share

#56 peardox Posted 12 August 2018 - 08:12 AM

peardox

(5) Thaumaturgist

• Members
• 564 posts
• Location:Manchester, UK

Oh,

I mentioned translation above

I've requed translations for all strings in First Mod (French and Spanish are the only ones we can't do yet)

If you're a member of our Slack I've automated Google translate for us (outsiders have to do this manually)

/poe translate For Frodo!

That translates For Frodo! and comes back with...

{
"de": "Für Frodo!",
"en": "For Frodo!",
"es": "Para Frodo!",
"fr": "Pour Frodon!",
"it": "Per Frodo!",
"pl": "Dla Frodo!",
"pt": "Para Frodo!",
"ru": "Для Фродо!",
"zh": "对于佛罗多！"
}

When you do more complex text it becomes far harder

"Give me a Norwegian Blue translates" badly for example - this is correctly translated in Convo Mod

I MAY do a translation tutorial mid-week (dead busy)

#57 house2fly Posted 12 August 2018 - 11:47 AM

house2fly

(8) Warlock

• Members
• 1163 posts
Remember, in the same way you copied and modified the greatsword in step 1, you can copy and modify itemmods, and the abilities and status effects attached to them. They'll need new UUIDs and new names via stringtables, but if you want to make a per-encounter version of Of Fireballs or make that freeze cone attack happen when an enemy misses you rather than when you crit, you have the power to make it happen.

(This isn't for peardox's benefit of course, but thought it might be encouraging for anyone following along)
• peardox likes this

#58 peardox Posted 12 August 2018 - 12:23 PM

peardox

(5) Thaumaturgist

• Members
• 564 posts
• Location:Manchester, UK

That's my next major update to this one

Believe me, on this one - I need someone to take my workload off so if you wanna continue feel free

Take First Mod and add (yep I have plans)

1) New status effects - simply copy Fireball, give it a new ID and more life

2) Complete new ItemMod make this a wow - something like a summon (@kilay + @tt1 can help here)

That's as far as I've planned today

Keep it under (or around) 100 lines - 200 is bad, 25 is bad. AND yep I know I just wrote a bit on Translation that is 'bad' - do what I ask not what I do

(1) Is easy but has to be explained propelrly

(2) Is much more fun but may need breaking in two

KISS my friend (Keep It Simple, Stupid)

The people who read this don't have our support mechanism unless they hit the invite link (in my Sig)

#59 peardox Posted 13 August 2018 - 06:37 AM

peardox

(5) Thaumaturgist

• Members
• 564 posts
• Location:Manchester, UK

This one may be a little premature but gets on article off my to-do list

If you're a member of the team, as mentioned above, we've automated the manual process (see my Sig)

So - translation

Start here - https://translate.google.com

The translations are far from perfect and you need to do them all manually

All language codes are ISO 3166 in any chat on this subject

POE2 has nine languages, currently but I believe South Korean is available

Some of my friends have done language conversions as there are a load of missing strings

So...

Start in design/localized - it'll give you an idea of what we're trying to do here - pick a langauge you DON'T speak and at least one that you do

All we have to do is create new translations in our override and change some numbers

first_mod.zip is a good framework for this as although we didn't translate anything provides a sample of how we do this stuff

We have a good count of willing ModDevs who are very happy to translate into your own language - See my Sig!

Think I'm the only Brit in our gang but we have MANY members who can do other languages...

#60 peardox Posted 15 August 2018 - 07:50 PM

peardox

(5) Thaumaturgist

• Members
• 564 posts
• Location:Manchester, UK

One of our members noticed an issue with String IDs

I feel it important to point this out here are if you're an aspiring Modder you should be aware of the problem and a solution we came up with

This, AFAIK, only applies to localised/<language>/text/<somethihg.stringtable>

We urge you to use REALLY big numbers

We have tested this theory and it proves to be true

The thing is how do you chose your numbers?

We wrote a helper website that has a 2M : 1 chance of getting the same number range as any other developer

https://poe.peardox.com/spacereq

All future releases of First Mod will be using the above helper

This page gives you 1024 numbers to use that are almost guaranteed to NEVER clash with anything else

Thanks to @TT1 for finding the issue and pointing us at a workable solution

Edited by peardox, 15 August 2018 - 07:50 PM.

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users