Icewind Dale: ToEE - Total Conversion

Discussion in 'Icewind Dale Total Conversion' started by Allyx, May 7, 2016.

Remove all ads!
  1. Allyx

    Allyx Master Crafter Global Moderator Supporter

    Joined:
    Dec 2, 2004
    Messages:
    5,009
    Likes Received:
    254
    Right, not certain if this will work, but here is a link to the split maps I've made so far for the prologue town of Easthaven. There are no doors, no clipping, nothing of interest to anyone if they wish to NOT break their game. I have overwritten certain house maps around Hommlet, the moathouse dungeon, and the Boatman Tavern in Nulb.

    EDIT: Ah sweet, it does work :D

    EDIT 2: I couldn't figure out how to get the night time maps extracted from Near Infinity, so currently using copies of the day maps as placeholders.

    Edit 3: The map splitter app wasn't working right, I kept getting multiple albeit differently coloured sections of the same map sections when splitting up the maps. So I used WB's splitter instead.
     
    Last edited: May 19, 2016
  2. Sitra Achara

    Sitra Achara Senior Member

    Joined:
    Sep 1, 2003
    Messages:
    3,622
    Likes Received:
    538
    Took a look, I can't seem to find the action "AddXP2DA" anywhere in the script actions on IEDSP. Could that be the same as AddXPVar?
     
  3. Shiningted

    Shiningted I changed this damn title, finally! Administrator

    Joined:
    Oct 23, 2004
    Messages:
    12,740
    Likes Received:
    374
    This is moving at a pleasantly rapid pace :) Allyx, I've downloaded the Easthaven maps, are you happy with those for me to start sectoring?

    While I'm waiting I'll mock up ol' Grisella's dlg and py files.

    EDIT: What, she sends you off to the cellars to kill pests? That's her quest? This was stolen from Desperate Housewives, dagnabit!!! What year was IWD???
     
    Last edited: May 20, 2016
  4. Allyx

    Allyx Master Crafter Global Moderator Supporter

    Joined:
    Dec 2, 2004
    Messages:
    5,009
    Likes Received:
    254
    Yeah mate, sector away to your heart's content, I'm going to try again to make night time versions' of those maps.

    Does that splitter tool work for you Ted? Maybe I'm using it incorrectly?

    I'll also add the next two maps as well to complete the "Prologue" chapter.
     
  5. Shiningted

    Shiningted I changed this damn title, finally! Administrator

    Joined:
    Oct 23, 2004
    Messages:
    12,740
    Likes Received:
    374
    I'll power it up now and see.

    Btw, the first quest is to kill beetles. I'm happy to say, KotB added beetles :)

    EDIT: There is something interesting here:

    DisplayStringNoNameDlg(Myself,14978)

    I'm going to guess (from context) that is a reference to some sort of generic dialogue file like ToEE's game_rd_npc_m2m.mes and similar. Any help @ineth?
     
    Last edited: May 20, 2016
  6. Sitra Achara

    Sitra Achara Senior Member

    Joined:
    Sep 1, 2003
    Messages:
    3,622
    Likes Received:
    538
    Have you created the text file that tells it the base image tile coordinates?
    For example if splitting AR1000.bmp you need to create AR1000.txt which contains two coordinates, X in first row and Y in the second. The images will be generated such that the top left corner is given those coordinates.

    You can use the following sheet to convert from desired ingame location XY to image tile XY
    https://docs.google.com/spreadsheets/d/1a0BNwg7Ljv32S9eCBVbXOoxC7xJfJbGgRCyGVLfMnbY/edit?usp=sharing

    Also, you should make sure the BMP dimension is an exact multiple of 256, else it will round it down for you.
     
  7. Shiningted

    Shiningted I changed this damn title, finally! Administrator

    Joined:
    Oct 23, 2004
    Messages:
    12,740
    Likes Received:
    374
    I've always found the easiest way to do it is just compile an existing map of roughly the same size - so maybe the Moathouse if this town is that size, or Nulb if bigger - then copy over, and resplit it.

    EDIT: Allyx, I seem to be claiming quest 1 for Grisella's first quest - she refers to 2, so I will need quest 2 as well in a few minutes - and global_vars[1]. We'll need a whole forum a la the KotB one to house this stuff. I think it can all be public since we are converting a known quantity.

    2nd EDIT: Here's Grisella's dlg (posted in IWD glory) converted to ToEE: I am not posting the files yet as they are untested. In good time...

    Code:
    {1}{Hello there, dearie. Welcome to the Winter's Cradle Tavern. My name's Grisella. I own and operate this fine establishment. What can I get for you?}{Hello there, dearie. Welcome to the Winter's Cradle Tavern. My name's Grisella. I own and operate this fine establishment. What can I get for you?}{}{}{}{}
    {2}{How about a drink?}{}{1}{}{20}{}
    {3}{I have some questions for you.}{}{1}{}{90}{}
    {4}{Nothing, thank you. Just passing through.}{}{1}{}{0}{}
    
    {20}{A drink? Of course, dearie. After all, this is a tavern... plenty to drink here, heh heh.}{A
    drink? Of course, dearie. After all, this is a tavern... plenty to drink here, heh heh.}{}{}{}{}
    {21}{Heh, heh. Yes, indeed.}{}{1}{}{30}{}
    {22}{Well? What do you have?}{}{1}{}{30}{}
    {23}{My, aren't you the sharp one? How about that drink?}{}{1}{}{30}{}
    
    {30}{Yes, well... you see I'm in a bit of a bind right now. I've just run out of everything. I've
    nothing to offer you in the way of drink at this moment.}{Yes, well... you see I'm in a bit of a bind right now. I've just run out of everything. I've nothing to offer you in the way of drink at this moment.}{}{}{}{}
    {31}{You've run out of everything?}{}{1}{}{40}{}
    {32}{What kind of tavern are you running here?}{}{1}{}{40}{}
    {33}{No spirits? That's it, I'm gone.}{}{1}{}{0}{}
    
    {40}{Well, the tavern hasn't run completely dry. I do have some stock down in the cellar, but...}{Well, the tavern hasn't run completely dry. I do have some stock down in the cellar, but...}{}{}{}{}
    {41}{But what?}{}{1}{}{50}{}
    {42}{Well, I suggest you march on down there and get me something to drink, woman.}{}{1}{}{50}{}
    {43}{Never mind. Farewell.}{}{1}{}{0}{}
    
    {50}{This is rather embarrassing... but I'm having somewhat of a pest problem down in that dirty ol' cellar and I'm afraid to go down there. I do so hate bugs! Just the thought of those nasty creepies and crawlies sends shivers down my spine.}{This is rather embarrassing... but I'm having somewhat of a pest problem down in that dirty ol' cellar and I'm afraid to go down there. I do so hate bugs! Just the thought of those nasty creepies and crawlies sends shivers down my spine.}{}{}{}{game.quests[1].state = qs_mentioned}
    {51}{We've already been down into your cellar—we killed all the beetles we found down there.}{}{1}{game.global_vars[1] > 0}{200}{game.quests[1].state = qs_completed; pc.money_adj(500)}
    {52}{I see. Is there anything I can do to help?}{}{1}{game.global_vars[1] == 0}{60}{}
    {54}{A big girl like you afraid of bugs? Come on, show a little backbone.}{}{1}{game.global_vars[1]== 0}{110}{}
    {55}{Great, a tavern with no booze and bugs to boot. I can't wait to see the rest of this town.}{}{1}{game.global_vars[1] == 0}{110}{}
    {56}{I'll just come back when you've solved your little problem. Farewell.}{}{1}{}{0}{}
    
    {60}{That's awfully sweet of you, dearie. But I don't expect you to go to any trouble on my
    account. I'm sure I'll think of something.}{That's awfully sweet of you, dearie. But I don't expect you to go to any trouble on my account. I'm sure I'll think of something.}{}{}{}{}
    {61}{Have no fear, madam. I shall see to it that the pests down below trouble you no further.}{}{1}{}{70}{}
    {62}{I could see to your pest problem... for a price, of course.}{}{1}{}{80}{}
    {63}{Well, best of luck to you. Farewell.}{}{1}{}{0}{}
    
    {70}{Wonderful! The stairs to the cellar are in the back room. Now you be careful down there, dearie, and don't let any of those little buggers creep back up here, all right?}{Wonderful! The stairs to the cellar are in the back room. Now you be careful down there, dearie, and don't let any of those little buggers creep back up here, all right?}{}{}{}{game.quests[1].state = qs_accepted}
    {71}{E:}{}{1}{}{0}{}
    
    {80}{Hmm. I suppose I could scrape together a couple of coins as payment for such a service. Let me see... how about 5 gold? Would that do, dearie?}{Hmm. I suppose I could scrape together a couple of coins as payment for such a service. Let me see... how about 5 gold? Would that do, dearie?}{}{}{}{npc_1(npc)}
    {81}{Five is plenty. Your pests are as good as gone.}{}{1}{}{70}{}
    {82}{It'll do, though it's hardly a fair sum for such a service.}{}{1}{}{70}{}
    {83}{Five gold! What will I ever do with such a treasure? Stop wasting my time.}{}{1}{}{120}{}
    {84}{On second thought, forget it. I'll drink somewhere else.}{}{1}{}{0}{}
    
    {90}{Sorry, dearie. I haven't the time to chitchat with you. I've a tavern to run, you know. If you are looking to catch up on the local gossip, I suggest you buy a round or mingle with some of the other patrons.}{Sorry, dearie. I haven't the time to chitchat with you. I've a tavern to run, you know. If you are looking to catch up on the local gossip, I suggest you buy a round or mingle with some of the other patrons.}{}{}{}{}
    {91}{All right, how about a drink?}{}{1}{game.quests[1].state < 2}{20}{}
    {92}{B:All right, how about a drink?}{}{1}{game.quests[1].state == qs_completed}{0}{pc.barter(npc)}
    {93}{Very well, I'll leave you to your work. Farewell.}{}{1}{}{0}{}
    
    // returning
    {100}{Welcome back, dearie. What can I get for you?}{Welcome back, dearie. What can I get for you?}{}{}{}{}
    {101}{How about a drink?}{}{1}{game.quests[1].state < 2}{20}{}
    {102}{B:How about a drink?}{}{1}{game.quests[1].state == qs_completed}{0}{pc.barter(npc)}
    {103}{I have some questions for you.}{}{1}{}{90}{}
    {104}{Nothing, thank you. Just passing through.}{}{1}{}{0}{}
    
    {110}{Hmph! Look, stranger... up here in Easthaven, we may be out on the frontier, but we do manage to act civilized toward one another. If you can't at least try to be polite, then there's the door, dearie.}{Hmph! Look, stranger... up here in Easthaven, we may be out on the frontier, but we do manage to act civilized toward one another. If you can't at least try to be polite, then there's the door, dearie.}{}{}{}{}
    {111}{My apologies. Is there anything I can do to help with your problem?}{}{1}{}{60}{}
    {112}{Right. I'm off then. Farewell.}{}{1}{}{0}{}
    
    {120}{Well now! Aren't we the greedy one? The way I see it, five coins is better than no coins. Take it or leave it, dearie.}{Well now! Aren't we the greedy one? The way I see it, five coins is better than no coins. Take it or leave it, dearie.}{}{}{}{}
    {121}{All right, all right. I'll take the job for five gold.}{}{1}{}{70}{}
    {122}{Right. I'm off then. Farewell.}{}{1}{}{0}{}
    
    // from qs_accepted
    {150}{Any luck getting rid of those nasty bugs, dearie? My customers are getting pretty thirsty.}{Any luck getting rid of those nasty bugs, dearie? My customers are getting pretty thirsty.}{}{}{}{}
    {151}{Not just yet. I'm working on it, though.}{}{1}{game.global_vars[1] == 0}{0}{}
    {152}{In due time—and stop calling me dearie! It's just plain silly!}{}{1}{game.global_vars[1] == 0}{0}{}
    {153}{It is done. Those bugs won't be troubling you anymore.}{}{1}{game.global_vars[1] > 0}{200}{game.quests[1].state = qs_completed; pc.money_adj(500)}
    {154}{Yes, they're dead. Now hand over the coins.}{}{1}{game.global_vars[1] > 0 and get_1(npc)}{200}{game.quests[1].state = qs_completed; pc.money_adj(500)}
    
    {200}{Thank you, dearie. You're a lifesaver. Just do me one more favor... keep this little bug
    problem between you and me. I don't want folks thinking Grisella's place isn't clean. Run along now.}{Thank you, dearie. You're a lifesaver. Just do me one more favor... keep this little bug problem between you and me. I don't want folks thinking Grisella's place isn't clean. Run along now.}{}{}{}{}
    {201}{Ooo, five gold? Shiny!}{}{1}{}{0}{}
    {202}{E:}{}{1}{}{0}{}
    {203}{B:I'll have that drink now, I've earned it.}{}{1}{}{0}{pc.barter(npc)}
    
    
    // if quest 2 'Freed Everard' is known
    {300}{I never thought I'd lay eyes on you again, dearie. Quick, we've no time to waste. Go talk to Everard. He'll know what to do next.}{I never thought I'd lay eyes on you again, dearie. Quick, we've no time to waste. Go talk to Everard. He'll know what to do next.}{}{}{}{}
    {301}{I shall speak with him straight away. Farewell.}{}{1}{}{0}{}
    
    // if quest 2 'Freed Everard' is advanced?
    {400}{Keep yourselves safe now, dearies. We'll never forget what you've done for us here.}{Keep yourselves safe now, dearies. We'll never forget what you've done for us here.}{}{}{}{}
    {401}{Thank you. Farewell.}{}{1}{}{0}{}
     
    Last edited: May 20, 2016
  8. ineth

    ineth Member

    Joined:
    May 15, 2016
    Messages:
    52
    Likes Received:
    4
    You have to look in the BG(2):EE script actions, because IWD:EE uses that engine rather than the original IWD engine.

    But it doesn't seem quite up-to-date, e.g. here are some more actions that were added to the EE engine when IWD:EE was released.

    I think that "quest" was meant as an ironic nod to the "start by killing rats in the basement" cliché that has existed in RPGs.
    This is the frozen North, so instead of rats you kill beetles... :)

    Apparently the same as DisplayStringNoName, which is defined as:

    Code:
    262 DisplayStringNoName(O:Object*,I:StrRef*)
    
    This action displays the strref specified by the StrRef parameter in the message window, without attributing the text to an object.
    The number is just the ID of the string to print. You can get the content of a specific string by ID using WeiDU like this:
    Code:
    weidu.exe --string 14978
    Alternatively, you can click "Search > StrRef" in NearInfinity. In this case, the string is:
    Code:
    You got rid of the beetles for Grisella.
     
  9. Shiningted

    Shiningted I changed this damn title, finally! Administrator

    Joined:
    Oct 23, 2004
    Messages:
    12,740
    Likes Received:
    374
    Ok, thanks for the rapid reply Ineth, there is a line number to go to so it should all be good.

    Can I ask you link to a few more Easthaven dlgs? I Don't intend to do them all but I'm as qualified as anyone to convert them so I will do a few and hopefully help those who come after.

    Allyx - still working on the maps, I put them in the wrong folder like a drunken n00b. Which is a coincidence...
     
  10. Allyx

    Allyx Master Crafter Global Moderator Supporter

    Joined:
    Dec 2, 2004
    Messages:
    5,009
    Likes Received:
    254
    @Sitra Achara I used Ted's method of just copy/pasting over an existing map.
    @ineth Thanks for your instructions for making night time maps, worked a charm :D
    @Shiningted That .DLG looks great mate thanks.

    Is there a 'best known configuration' for World Ed? I've tried using it, but everytime I open it, it crashes after a minute or two.
     
  11. ineth

    ineth Member

    Joined:
    May 15, 2016
    Messages:
    52
    Likes Received:
    4
    IWD:EE dialogs and strings

    Attached are all the decompiled DLG files of the game - 212 in total (but that includes the expansion).
    EDIT: I also exported the whole string database (dialog.tlk) as a .tra file, so that you can look up string references made by script functions (like DisplayStringNoNameDlg or AddJournalEntry), but it is too large for a forum attachment so I uploaded it to here.

    Details on how I mass-exported them:
    At first I tried to script the mass export using WeiDU's own scripting language, but it didn't seem to work the way I envisioned, so instead I used the following shell script which repeatedly calls WeiDU's command-line interface to export all the DLG's:
    Code:
    mkdir -p export/dlg
    weidu --list-files | grep -i '\.DLG$' | xargs -d"\n" weidu --full-from --text --out export/dlg
    
    weidu --traify-tlk --out export/dialog.tra
    (I'm using Linux, but the script probably works on Mac OSX as well. For Windows it would have to be translated to a Batch or Powershell script, of course.)

    I haven't gone through them yet to sort them by chapter/area.
    But here are two to get you started:

    djhonen.d = Jhonen, a villager who stands outdoors in Easthaven (AR1000), and sends you on a small quest that involves only talking, no combat.
    delisia.d = Elisia, A siren/mermaid kind of creature at the south-west shore on the same map, whom you need to talk to for Jhonen's quest.

    PS: Be aware that Jhonen's dialog states 18 to 24 are used during the end-game sequence (chapter 6), not during the prologue.
     

    Attached Files:

    • dlg.zip
      File size:
      547.1 KB
      Views:
      3
    Last edited: May 20, 2016
  12. Shiningted

    Shiningted I changed this damn title, finally! Administrator

    Joined:
    Oct 23, 2004
    Messages:
    12,740
    Likes Received:
    374
    Thanks Ineth.

    Allyx - I've got those maps working (or at least the few I tried). Will get to work sectoring them in the morning :) Your nomenclature could use some work btw - no need to call them Hommlet this-and-that, just name them what they are.
     
  13. Allyx

    Allyx Master Crafter Global Moderator Supporter

    Joined:
    Dec 2, 2004
    Messages:
    5,009
    Likes Received:
    254
    Well in that case, I'll rename the map folders to where they are in IWD, might need help remembering which file to edit to recognise the new folder names though.
     
  14. ineth

    ineth Member

    Joined:
    May 15, 2016
    Messages:
    52
    Likes Received:
    4
    [IWD:EE] NPCs in Easthaven (prologue)

    The following are all the characters that you can talk to in Easthaven during the prologue:
    Code:
      Character               | dialog file   | creature file | main script
    --------------------------|---------------|---------------|---------------
    
    AR1000 (outdoors):
      Jhonen                  | DJHONEN.DLG   | JHONEN.CRE    | EHJHONEN.BCS
      Elisia                  | DELISIA.DLG   | ELISIA.CRE    | EHELISIA.BCS
      Damien                  | DDAMIEN.DLG   | DAMIEN.CRE    | EHDAMIEN.BCS
      Scrimshander [Apsel]    | DAPSEL.DLG    | APSEL.CRE     | EHAPSEL.BCS
      Boy 1 [Jeffy]           | DCHILGEN.DLG  | EBOY1.CRE     | EHBOY1.BCS
      Boy 2 [Chizelo]         | DCHILGEN.DLG  | EBOY2.CRE     | EHBOY2.BCS
      Girl [Ahmadora]         | DCHILGEN.DLG  | EGIRL1.CRE    | EHGIRL1.BCS
      Girl [Dillsandra]       | DCHILGEN.DLG  | EGIRL2.CRE    | EHGIRL2.BCS
      Townsperson             | DTOWNGEN.DLG  | TOWNIEM1.CRE  | EHTOWNM_.BCS
      Townsperson             | DTOWNGEN.DLG  | TOWNIEM3.CRE  | EHTOWNM3.BCS
      Townsperson             | DTOWNGEN.DLG  | TOWNIEM4.CRE  | EHTOWNM3.BCS
      Townsperson             | DTOWNGEN.DLG  | TOWNIEF1.CRE  | EHTOWNF1.BCS
      Townsperson             | DTOWNGEN.DLG  | TOWNIEF2.CRE  | EHTOWNF2.BCS
      Townsperson             | DTOWNGEN.DLG  | TOWNIEF3.CRE  | EHTOWNF3.BCS
    
    AR1001 (temple):
      Accalia                 | DACCALIA.DLG  | ACCALIA.CRE   | EHACCALI.BCS
      Everard                 | DEVERARD.DLG  | EVERARD.CRE   | EHEVERAR.BCS
    
    AR1002 (home):
      Townsperson             | DTOWNGEN.DLG  | TOWNIEF1.CRE  | EHTOWNF4.BCS
    
    AR1003 (home):
    
    AR1004 (home):
      Hrothgar                | DHROTH.DLG    | HROTH.CRE     | EHHROTH.BCS
    
    AR1005 (home):
      Gaspar                  | DGASPAR.DLG   | GASPAR.CRE    | EHTOWNF5.BCS
    
    AR1006 (tavern):
      Hildreth Highhammer     | DHILDRTH.DLG  | HILDRETH.CRE  | EHHILDRE.BCS
      Hrothgar                | DHROTH.DLG    | HROTH.CRE     | -
      Townsperson [Grisella]  | DGRISELL.DLG  | BARKEEP.CRE   | EHBARKEE.BCS
      Townsperson             | DTOWNGEN.DLG  | STOOLM1.CRE   | EHBARM_.BCS
      Townsperson             | DTOWNGEN.DLG  | STOOLM2.CRE   | EHBARM_.BCS
      Townsperson             | DTOWNGEN.DLG  | CHAIRM1.CRE   | EHBARM_.BCS
      Townsperson             | DTOWNGEN.DLG  | CHAIRM2.CRE   | EHBARM_.BCS
      Townsperson             | DTOWNGEN.DLG  | CHAIRM3.CRE   | EHBARM_.BCS
    
    AR1007 (store):
      Pomab                   | DPOMAB.DLG    | POMAB.CRE     | EHPOMAB.BCS
    
    AR1008 (inn):
      Erevain Blacksheaf      | DEREVAIN.DLG  | EREVAIN.CRE   | EHEREVAI.BCS
      Innkeeper [Quimby]      | DQUIMBY.DLG   | INNKPR.CRE    | EHQUIMBY.BCS
    
    AR1009 (home):
      EHOldJed [Old Jed]      | DOLDJED.DLG   | OLDJED.CRE    | EHOLDJED.BCS
    
    AR1010 (workshop):
    
    AR1011 (warehouse):
      Churin                  | DCHURIN.DLG   | CHURIN.CRE    | EHCHURIN.BCS
      Townsperson             | DTOWNGEN.DLG  | TOWNIEM2.CRE  | EHWORKM1.BCS
      Townsperson             | DTOWNGEN.DLG  | TOWNIEM3.CRE  | EHWORKM2.BCS
    
    AR1012 (home):
      Townsperson             | DTOWNGEN.DLG  | TOWNIEF4.CRE  | EHTOWNF6.BCS
    
    AR1013 (home):
    
    AR1014 (home):
      Townsperson             | DTOWNGEN.DLG  | TOWNIEF5.CRE  | EHTOWNF7.BCS
    
    AR1015 (tavern cellar):
    
    AR1016 (store upper floor):
    
    Note that all the generic "townsperson" share the same dialog tree.
     
    Last edited: May 20, 2016
  15. Allyx

    Allyx Master Crafter Global Moderator Supporter

    Joined:
    Dec 2, 2004
    Messages:
    5,009
    Likes Received:
    254
    So much I wanted to get done today, all gone to pot because Windows 7 wanted to install 155 updates at once, failed to do so, and instead decided that rolling back the changes was a better idea. D'oh! >.<
     
Our Host!