Jump to content

peardox

Members
  • Posts

    564
  • Joined

  • Last visited

  • Days Won

    2

Posts posted by peardox

  1. No chance I get this one done tonight

     

    The 90% rule rears it's head

     

    This SHOULD take about an hour - already done it but stupidly deleted the source

     

    I expect t release the final tomoz evening

     

    I'm doing an undocumented Mod here guys - of course I'll muck it up - more likely multiple times

     

    Back in the AM (my god - it's 10 PM - the wife is gonna roast my nuts - not in a good way)

  2. To date I've made https://peo2.slack.com invite only

     

    I intend to invite the world to our little party Fri/Sat

     

    The reason for opening the site is so we can get Mod reqs from the general public

     

    I'm rather amazed you aint asked for an invite @ZapGunForHire - it's right up your street

     

    @FXLUK same comment 

     

    Certain people I've had PMs from should absolutely be in our little group

     

    I'm not going to shame these guys into action (well - I will in a round-about way)

     

    Our Modding comminuty revolved around our five core members - do it, become a core member - you'll be glad you did - simply PM me with yer email (slack's dumb rules, not mine)

     

    Our little group are pushing the boundaries

     

    Hell, when I started the group I thought - OK - not a bad idea. For days it was... Now we've got active membership who are discussing things I'd never even considered

     

    Our most active forum members (where you Zap?) are all members (@Zap - where you... Maths - fun)

    • Like 2
  3. 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]

     

    Waenglith.zip

    • Like 4
  4. OK - the patch notes imply I can do a convo mod without breaking the world if you've got 1.2.0

     

    I'll be working on this today

     

    Killing Darmo was a happy coincidence if that hadn't happened the tutorial would be out of date at the point of publication

     

    I've got the rest of my original text that only needs minor tweaking before I hit the hard stuff in part three (3)

     

    Expect part two (2) in not-too-long

     

  5. It was only a quick test I did on Sunday

     

    If you do your Modder's slack (poe2.slack.com - invite only ATM - PM me your email for an invite) I've added a few comments to enthuse Hampster (@tonpix on slack)

     

    As of this moment we can only do something like I show above (Large texture) but I've PM's @BMac reqing Small as well - you'll notice on that image the icon in the vendor's list is still the old one.

     

    Don't bother trying - I already did - Small results in a missing icon (Big RED X)

     

    As convos are now moddable I'm gonna finish off my morning with the usual readthru of important stuff then get back to doing that

     

    It's fortunate that I had problems yesterday as today's will be worth actually doing stuff with (I was prepping people yesterday, today it's a reality)

  6. Mega way cool

     

    TT1 - check this out

     

    This is a one line patch to the infamous Parrot

     

    In your mod Directory create a piccy @ gui/icons/items/misc/dead_parrot.png

     

    Now, simply change...

     

    "IconTextureLarge": "gui/icons/items/misc/pet_white_bird_l.png",
     
    To...
     
    "IconTextureLarge": "gui/icons/items/misc/dead_parrot.png",
     
    And we get this
     
    @BMac - can we have IconTextureSmall as well please as this is a really great feature
     
    I usually do 256x256 art or powers of 2 - 512, 1024, 2048 etc for a large - can we have a recommended size for art
     
    That particular image is simply a test so can't let you have it - it's some guy's Parrot T-Shirt design and hence is © <someone>
     
    I've got two artists who want to start adding modding contrubutions
     
    I'll go contact them now
     

     

    parrot.png

    • Like 2
  7. You kiddo :)

     

    I always thought it was the Monty Hall - yes guys Zaps your Dad and I'm even older (55)

     

    My track record is superb - ever play Unreal? Tomb Raider?

     

    I did it about a year before you saw it.

     

    I remember the day destinctally  when Mark Rein (someone you'll never heard of - he's VP of Epic) came to my desk desiring to show off Unreal v 0 off

     

    He offered to swap me a beta for another beta I had on my desk - shoulda taken that deal :)

     

    When you see all these Unreal calls - I was there at the start

     

    As I've been in the biz forever I've got other funny stories

     

    Am I old enough now :)

  8. Still broken - in a moment

     

     

    Quick check - they nearly got it right

     

    I've got a benign (only checks stuff) script

     

    As you may have noticed I number things so this one is exported-1.2.0 (explanation before bug report)

     

    exported-1.2.0/design/chatter/chatter.chatterbundle
    JSON_ERROR_SYNTAX

     
    That's the only one that fails - I can see what is likely wrong
     
    Yep - sloppy
     
    simon@Ubu:~/git/utils$ tail exported-1.2.0/design/chatter/chatter.chatterbundle
                            "OnExitScripts": [],
                            "OnUpdateScripts": []
                    }
            ],
            "ClassExtender": {
                    "ExtendedProperties": []
            }
    },
    
    ]}
    

    As I say - sloppy, the last comma invalids15M of data

     

    Good luck in 1.2.1

     

    Does anyone want my JSON and fixed versions of 1.2.0? It'll only take me a few minutes?

     

    Err dumb question - of course you do

     

    I'm only gonna do Zips this time as it takes ages to do the RAR + TGZ versions 

    • Like 1
  9. We could do with a mathematician :)

     

    We can prob come up with some cool number theory for you to solve.

     

    I'm doing a making suppositions going on what I know about you

     

    I put you as a 20-ish maths fan - did I win?

     

    Take three boxes - pick one, I'll open one to show it's worthless One of the remaining has a brand new car in it - do you switch boxes?

     

    I love that Q cos it's so counter-intuative (there;s some US gameshow based on this topic, I believe

  10. Never read the tin..

     

    1.2.0 looks good so far but I'm exceptionally single minded so had a few hours kip and now I'm back on the case.

     

    I will especially to looking into the convo mods of this as I want to give you good advice

     

    I've automated cleaning up exported - anyone wanna bet me I can find something still wrong? No takers? Cool, this is almost certain to occur.

     

    Right - off bug hunting

  11. I'm going to do my usual of checking everything - we're well aware of the issues

     

    I'm gonna be very accurate this time

     

    eg. in progression we have " something " which is junk JSON

     

    My dream is running my scripts and zero errors

     

    Honestly, I find the chances low if I add a key check

     

    Obsisian have done a lot - Can't manage too much turn-around so quickly so they are defo reading what we write

     

    1.2,0 should be here now

  12. Wow - cool stuff BMac

     

    Have we done conversationbundles yet?

     

    This is the main target of my article today

     

    [Everyone else]

     

    I'll be doing a clean on 1.2.0 and publishing it (I'm not convinced yet)

     

    I'll leave 1.1.1 alone but next update will rotate

     

    I take it some ppl will still like my prettified JSON so regardless of my research I'll do an update for the JSON stuff

  13. Don't worry

     

    Part 2 is on the way

     

    See the Killed Darmo thread

     

    I have to alter some instructions for part 2

     

    Once again this will do nothing useful (part 3 does that)

     

    Part of learning is doing absolutely nothing useful paid off with a big "Wow" - Cool! at the end

     

    Part 3 has the "Wow" - Cool factor

     

    Let me fix that one now

     

    It's likely I'll end up finishing this tomorrow as part 3 is a real bitch

  14. @fxluk

     

    Downloaded your MOD but there's one small issue

     

    You credit myself while I credit @ZapGunForHire

     

    It's Zap's that allowed me to write it so quickly so his / her research allowed me a very fast turn around

     

    I would prefer it is you credited Zap rather than myself on this one

     

    I'd already asked if he / she was going to do a mod on it but was given carte-blanche to to whatever I saw fit

     

    I hope you understand, @ZapGunForHire found the keys while I (@Peardox) simply used that info to do Fair Trade

     

    You should join out Slack group (see the Slack messages)

  15. We're many mods now so TT1 and Xaratas - you can now muck about with poe2.slack.com

     

    I've created some private and public channels. You can only see the channels we let you see. There is solid reasoning behind this - basically we don't want out Devs, Translators Artists etc delugued with reqs

     

    At the end of the week I'll open this to public consumption

     

    This seems a fair way to do this so we can get as many talented people into the mix to start with

     

    I intend to make a general announce on Saturday, 7/7/18

     

    Hey - hamster we can guide you thru your first release as well so you start to get that much required experience. You've got some of the best Mod Devs at your beck + call, I know that if you PM / Slack me some art you'll be famous in minutes. All we ask is whoever does the job gets a credit - e.g. I credited @ZapGunForHire then @FLXUK credited myself - actually, I'd better point out the missing credit (gonna do that right now)

    • Like 1
  16. This is a long and complex subject so I'm doing a Part (1, 2, 3)

     

    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.nexusmods.com/pillarsofeternity2/mods/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.microsoft.com/en-us/windows/wsl/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...

    dirstruct.zip

    • Like 2
  17. Still borked him

     

    I KNOW exactly how to do this 

     

    It is possible I ran him out before I hit 20 (he's currently a blue zombie - i.e. not talkable to)

     

    I KNOW I can Mod Waenglith - done her before for a Dead Parrot test

     

    Problem with her is she's got a complex conversation tree (72 nodes)

     

    If the reset don't work I'll switch to her

     

    This will make it more complex but 100% sure of working

     

    More info when I have some to share

     

    The Tutorial is extremely long, I'm well over 200 lines already detailing the basics

×
×
  • Create New...