Jump to content

argent77

Modders
  • Posts

    1,597
  • Joined

Everything posted by argent77

  1. WeiDU v247 has several compatibility issues. Afaik, only a small number of mods is affected by it. However, replacing all WeiDU installers by earlier versions doesn't work either because some mods make use of features introduced by the latest WeiDU version.
  2. That error appears to be triggered only if you use WeiDU v247 to install the mod. Try installing the mod with WeiDU v246 (the version included in the mod archive).
  3. Strrefs are more than just the strings. They also include associated sounds and flags that describe how these strings are displayed. Moreover, some languages contain separate female strings. Using string references is the most accurate way to reproduce the content of a dialog structure. To adjust BG1 dialogs for EET you simply have to add 200000 to their strref values (provided all string references are available in vanilla BG1 or SoD).
  4. It's mentioned in the IESDP (if you know what you're looking for).
  5. SetGlobal() and SG() are different script actions. Only actions listed in INSTANT.IDS are executed within dialog states by the engine. Everything else is added to the action queue and executed only when the dialog ends. SetGlobal() is listed, SG() is not.
  6. It's certainly possible with the WeiDU commands GET_DIRECTORY_ARRAY and GET_FILE_ARRAY. Arrays can be expanded dynamically simply by assigning new values to the array. Example: // Retrieve list of subfolders GET_DIRECTORY_ARRAY ~paths~ ~%MOD_FOLDER%/mypath~ ~.+~ // Collect file entries OUTER_SET index = 0 ACTION_PHP_EACH paths AS _ => current_path BEGIN // Skip special folder names "." and ".." ACTION_IF (~%current_path%~ STRING_MATCHES_REGEXP ~.*/\.\.?~ != 0) BEGIN GET_FILE_ARRAY ~files~ ~%current_path%~ ~.+~ ACTION_PHP_EACH files AS _ => file_name BEGIN OUTER_TEXT_SPRINT $my_array(~%index%~) ~%file_name%~ OUTER_SET index += 1 END ACTION_CLEAR_ARRAY ~files~ // prevents false positives when array is reused in the next pass END END // Output: OUTER_FOR (i = 0; i < index; ++i) BEGIN OUTER_TEXT_SPRINT file $my_array(~%i%~) PRINT ~File %i%: %file%~ END
  7. Judging from the answer on this page it's most likely a raw OCaml error message which isn't really helpful for the modder since it references an internal implementation detail.
  8. If you simply want to use an existing weapon animation without making any changes then it's much simpler to change the weapon item's equipped appearance to that weapon animation code.
  9. A bit of technical information and why so few modders have tried to add more weapon animations in the past. Weapon animations (as well as shield and helmet animations) are separate sprites that are drawn on top of the avatar sprite. These overlays correspond with the individual animation sequences of the avatar sprites. For example, the character animation uses three different animation sequences for one-handed weapons (slash, backslash and thrust). The same is true for two-handed weapons which use a different set of three animation sequences. Since spears are two-handed weapons in the game, there are only the two-handed weapon animations available. That's why you don't see a weapon animation if you transform spears into one-handed weapons. You could simply rename the weapon animations to match the one-handed animation names, but then weapon movement and avatar movement are out of sync. You have no choice but to create a new set of animations from scratch or change a similar-looking one-handed weapon animation to match your desired style. However, both options would result in an enormous amount of work. You would have to create individual animations for 9 different directions for each of the three attack types. Moreover, you have to bear in mind that there are creature animations in different sizes. There are halflings/gnomes/dwarves with small-scale animations, elves with medium-scale animations and humans with large-scale animations. All in all you would have to create or modify thousand or more individual animation frames. On top of that, if you want to allow the weapon to be wielded in the left hand you would also have to create the same set of animations for the left hand.
  10. It's a spelling error (Saphire -> Sapphire). I was able to reproduce the looping issue with the full script. After a bit of testing I could determine the culprit. The action DestroyItem() appears to block further script execution. I remember that lynx (or Avenger?) mentioned some time ago that only script actions listed in INSTANT.IDS are safe to be used in dialogs. Most other script actions block further script execution.
  11. The code looks fine (apart from a minor typo ) and it worked fine in BG2 when I compiled it as a standalone dialog. It's possible that previously executed script actions in the dialog are somehow blocking execution of the current script actions.
  12. A single call of EXTEND_TOP ~script.bcs~ ~mymod/scripts/nuscript.baf~ EVAL should be enough. EXTEND_[TOP|BOTTOM] automatically fetches the game script from BIFF or override (and even creates a new SCRIPT.BCS if it doesn't exist yet), compiles the .BAF and extends the game script. EVAL can be omitted if you don't need to evaluate variables in the .BAF.
  13. The structure information was based on reverse engineered data from the EE executable. However, after some more testing it looks like several key features I mentioned in my previous post can't be used because they are still hardcoded in the engine. I have updated the animation structure description in my previous post to make it more clear. These features might become relevant again if Beamdog or modders can fix/patch the game executable to remove the hardcoded restrictions.
  14. @Acifer Thanks to Bubb's excellent reverse engineering skills I can provide a more accurate description of the dragon animation type: Animation type "multi_new", 9-part BAM animations (slot ranges 1200..12ff): - naming scheme: [prefix][sequence].BAM - prefix: an arbitrary BAM file prefix (e.g. MDR1, MDR2, ...) - sequence: (Numbers behind WK/SC/SD/... indicate cycle numbers) - if attribute split_bams=0: <-- NOTE: This mode is currently ignored in EE games - G1[quadrant]: WK=0-8 - G2[quadrant]: SD/SC/SP=0-8, SD(unused)=9-17, SC(unused)=18-26 - G3[quadrant]: A1=0-8, A2(unused)=9-17, A3(unused)=18-26 - G4[quadrant]: GH=0-8, DE/SL/GU*=9-17, TW=18-26, SL(unused)=27-35, DE(unused)=36-44 - G5[quadrant]: SP(unused)=0-8, CA=9-17 - *: GU (get up) sequence: frames are played back in reverse order by the engine - if attribute split_bams=1: - 1[quadrant]0[dir]: WK=[dir] - 2[quadrant]0[dir]: SD/SC/SP=[dir], SD(unused)=9+[dir], SC(unused)=18+[dir] - 3[quadrant]0[dir]: A1=[dir], A2(unused)=9+[dir], A3(unused)=18+[dir] - 4[quadrant]0[dir]: GH=[dir], DE(unused)=9+[dir], TW(unused)=18+[dir], SL(unused)=27+[dir], DE(unused)=36+[dir] - 4[quadrant]1[dir]: GH(unused)=[dir], DE/SL/GU*=9+[dir], TW(unused)=18+[dir], SL(unused)=27+[dir], DE(unused)=36+[dir] - 4[quadrant]2[dir]: GH(unused)=[dir], DE(unused)=9+[dir], TW=18+[dir], SL(unused)=27+[dir], DE(unused)=36+[dir] - 5[quadrant]1[dir]: SP(unused)=[dir], CA=9+[dir] - *: GU (get up) sequence: frames are played back in reverse order by the engine Example BAM filename for prefix "MDR1", animation sequence CA (release spell), top-right quadrant, SW direction: MDR15312.BAM (active cycle=11) - quadrant: - index in range [1..quadrants]; one digit (see quadrants attribute below) - ordered left->right, top->bottom - dir: - a single-digit number indicating a direction (0=S, 1=SSW, 2=SW, 3=WSW, 4=W, 5=WNW, 6=NW, 7=NNW, 8=N) - eastern directions are calculated by the engine - INI attributes (EE games 2.0+): <-- NOTE: These attributes are currently overridden by harcoded values in EE games - double_blit: (boolean) apparently unused in EE games - quadrants: (int) the number of quadrants the animation has been split into - split_bams: (boolean) 1: animations are spread over various subfiles; 0: animations are packed in G1-G5 files (see above definitions) - palette1: (string) palette resref for sequences starting with "1" prefix - palette2: (string) palette resref for sequences starting with "2" prefix - palette3: (string) palette resref for sequences starting with "3" prefix - palette4: (string) palette resref for sequences starting with "4" prefix - palette5: (string) palette resref for sequences starting with "5" prefix Many animation sequences are marked as "unused". They usually just contain duplicate cycle entries or placeholder data. Unfortunately several features are currently hardcoded in the EE games and can't be changed. This includes the INI attributes as well as not being able to use the unsplit BAM format. I have mentioned them in case Beamdog or modders remove the hardcoded restrictions in future game patches.
  15. These script actions are available to all animations in slots range 3000-3fff. This includes the new Neothelid animation in SoD. The D-type BAMs are just used as an extra layer for this animation type and rendered behind the creature sprite for the ground part. The number of frames in these BAMs don't have to be in sync with the creature sprite BAMs. They are simply played back repeatedly until the creature animation sequence has ended.
  16. That's an interesting idea. I don't know if it's possible, but I'll look into it.
  17. I have recently digged into the various creature animation formats for NI. Maybe these notes about splitted bams can help: Animation type "multi_new" 9-part variant: slot range (1200..12ff) - naming scheme: [resref][sequence].BAM - resref: - a four-letter prefix (e.g. MDR1, MDR2, ...) - sequence: (Note: numbers behind WK/SC/SD/... indicate cycle numbers) - 1[segment]0[dir]: WK=[dir] - 2[segment]0[dir]: SC=[dir], SD=9+[dir], SC=18+[dir] - 3[segment]0[dir]: A1=[dir], A2=9+[dir], A3=18+[dir] - 4[segment]0[dir]: GH=[dir], DE/SL=9+[dir], TW=18+[dir], DE/SL=27+[dir], DE/SL=36+[dir] - 4[segment]1[dir]: GH=[dir], DE/SL=9+[dir], TW=18+[dir], SL=27+[dir], SL/DE=36+[dir] - 4[segment]2[dir]: GH=[dir], DE/SL=9+[dir], TW=18+[dir], SL=27+[dir], SL/DE=36+[dir] - 5[segment]1[dir]: SP=[dir], CA=9+[dir] - segment: - index in range [1..9]: single digit - ordered left->right, top->bottom - dir: - a single-digit number indicating a direction (0=S, 1=SSW, 2=SW, 3=WSW, 4=W, 5=WNW, 6=NW, 7=NNW, 8=N) - eastern directions are calculated by the engine - Attributes (INI files, EE 2.0+): - can_lie_down: (boolean) whether creature falls down when dead/unconscious (?, tbc) - detected_by_infravision: (boolean) whether a red tint is applied when detected by infravision - false_color: (boolean) whether color replacement is enabled - path_smooth: (boolean) 0: pathfinding uses only 45 degrees angles 1: pathfinding uses arbitrary angles (probably as many angles are directions available) - quadrants: (int) the number of segments the animation has been split into - split_bams: (boolean) 0: animations are packed in G1 and G2 files 1: animations are spread over various subfiles ^^ confirmed to be working with 4-part variant (see below), might also work for 9-part variant but I don't know the encoding scheme - translucent: (boolean) whether animation is semi-transparent Animation type "multi_new" 4-part variant: slot range (1300..13ff) - naming scheme: [resref][sequence].BAM - resref: - a four-letter prefix (e.g. MDEM, ...) - sequence: (Note: numbers behind WK/SC/SD/... indicate cycle numbers) - if split_bams=1: - G1[segment]: SC=9-17 - G1[segment]1: WK=0-8 - G1[segment]2: SD=18-26 - G1[segment]3: GH=27-35 - G1[segment]4: GH=27-35, DE=36-44, TW=45-53 - G1[segment]5: TW=45-53 - G2[segment]: A1=0-8 - G2[segment]1: A2=9-17 - G2[segment]2: A3=18-26 - G2[segment]3: A4=27-35 - G2[segment]4: A5=36-44 - G2[segment]5: SP=45-53 - G2[segment]6: CA=54-62 - if split_bams=0: - G1[segment]: WK=0-8, SC=9-17, SD=18-26, GH=27-35, DE=36-44, TW=45-53, SL=54-62, GU=63-71 - G2[segment]: A1=0-8, A2=9-17, A3=18-26, A4=27-35, A5=36-44, SP=45-53, CA=54-62 - eastern directions are calculated by the engine - segment: - index in range [1..4]: single digit - ordered left->right, top->bottom - Attributes (INI files, EE 2.0+): same as for 9-part variant
  18. Spellhold Studios PS:T Unfinished Business - Reloaded This mod is a continuation of Qwinn's original PS:T Unfinished Business (PST-UB), based on version 4.12, that has been completely overhauled and made compatible with Planescape Torment: Enhanced Edition (PST:EE). This release adds the new component "Restored Tenement of Thugs" specifically for PST:EE, based on content from Qwinn's PS:T Fixpack, as well as several translation updates and Project Infinity support. Changelog: Added new component "Restored Tenement of Thugs" for PST:EE Converted readmes into html format Updated Spanish translation (thanks SrReddy) Updated Italian translation Updated Brazilian Portuguese translation Added Project Infinity metadata Added WeiDU SUPPORT information Fixed potential display issues with component names in WeiDU.log and Project Infinity Download: GitHub Discussion: SHS, Beamdog Readme
  19. There are actually kit_example.tph, kit_example2.tph, kit_example3.tph and kit_example4.tph to demonstrate how to add a regular singleclass kit, copy an existing kit, retrieving attributes from an existing kit and adding a true multiclass kit in addition to the readme. The parameters are largely the same as for the old ADD_KIT/fl#add_kit_ee combo, so there shouldn't really be a need for another tutorial.
  20. Since you can only visit stores through the magic store you have visited before at least once this condition is met automatically. Special access could mean a monetary fee or some other kind of "donation", or only party members of certain races, gender or alignment can access the store. Basically everything that is specifically checked every time you want to visit a store from the regular merchant.
  21. New release: Magic Store of Vergadain 2.0 This version offers two options how to install the magic store: 1. Fee required: The ghostly merchant will only allow you to access stores when you pay him a fee. The fee amount depends on the current game or campaign. This option has been included for balance reasons, since the magic store can make life of an adventurer much easier (e.g. having the opportunity to resurrect your companions, identify items or restock with consumables even in the most remote places of the world). 2. Free of charge: This is the same option as provided by the previous mod version. You can access any shop offered by the magic store free of charge. This release also takes care of special stores where you would have to pay an additional fee for access (e.g. Ribald's special store in BG2). Currently only two shops are considered (Ribald's special store and a store offered by the Golem Construction mod). Please let me know if there are more mods with stores that require some kind of "access conditions", so I can add them to the mod. Moreover, this version adds Russian translation to the mod. Changes: Added new install option: Ghostly Merchant may charge a fee whenever you want to visit a store Added special treatment of stores where the original merchant demands a fee for access Added Russian translation (thanks yota13) Added German readme
  22. Magic Store of Vergadain The mod allows you to acquire a magical artifact called "Magic Store of Vergadain" that provides the means to visit any store you have visited in the past. Getting your hands on this unique artifact involves a small quest of one kind or another. It is available for original BG2, Tutu, BGT, BG:EE, SoD, BG2:EE, EET and IWD:EE. This release provides multiple installation options and comes with Russian translation by yota13. Changes: - Added new install option: Ghostly Merchant may charge a fee whenever you want to visit a store - Added special treatment of stores where the original merchant demands a fee for access - Added Russian translation (thanks yota13) - Added German readme Download: GitHub Discussion: G3, Beamdog Readme
  23. The group of "Nearest()" identifiers has never worked correctly for me. Afaik, "Nearest()" also takes the active creature into account, and "SecondNearest()" actually targets the third nearest (when taking the active creature into account). In your case the NearestAllyOf() specifier in combination with Allegiance() and General() checks might produce the desired result: IF See(NearestAllyOf(Myself)) Allegiance(LastSeenBy(Myself),PC) General(LastSeenBy(Myself),HUMANOID) THEN ... However, that only works in EE games. Edit: You might even drop the Allegiance() check, but I don't know of NearestAllyOf also includes familiars and other ally types in the check.
  24. Thanks for the hint about the parameter "from_utf8". This is a big improvement over the traditional way of handling translations. No more trouble creating .tra files with the right ANSI encoding. This "feature" isn't related in any way to HANDLE_CHARSETS though. It rather appears to be a quirk of the WeiDU binary. The 64-bit Windows executable seems to display UTF-8-encoded setup.tra correctly in the console window, but the 32-bit executable does not. Since most mods ship with 32-bit executables it's still advisable to use only US-ASCII characters in the setup.tra.
×
×
  • Create New...