@argent77 I'm getting a bit of an unexpected search result. In ToSC game, I use the navigation tree to go to CRE -> VALINO.CRE, go to the Edit tab, and select Find -> references to this file -> Default -> Search. The results are:
However, I can not find any reference to Valino (or Valinor) in any of these files. I then go to Search -> Text Search -> 2DA using the menu bar at the top, and perform a search for "valino". No hits are found. Nor are any results found when performing a BCS Text Search for "valino". Any ideas?
And who the heck is Valinor, and why is he worth the second most XP of any CRE in the game? The only Valinor I am familiar with is Tolkien's, but further down that page a reference is made to a possible D&D connection:
In the Arcanis Dungeons & Dragons campaign setting the word "Valinor" also refers to celestial servants of the Gods. Their names often are in the style of the god, such as the Mercy of Neroth or the Judgement of Nier.
Searched for: XP value - 9999 Number of hits: 15 File: ELMIN1.CRE Name: Old Man Attribute: XP value=26000 File: ELMIN2.CRE Name: Elminster Attribute: XP value=26000 File: ELMIN3.CRE Name: Elminster Attribute: XP value=26000 File: ELMIN5.CRE Name: Elminster Attribute: XP value=26000 File: ELMINS.CRE Name: Elminster Attribute: XP value=26000 File: SHANDAL2.CRE Name: Shandalar Attribute: XP value=26000 File: VALINO.CRE Name: Valinor Attribute: XP value=20000 File: DEATHK.CRE Name: demonknight Attribute: XP value=15000 File: KOVERA.CRE Name: Koveras Attribute: XP value=15000 File: SAREV1.CRE Name: Armored Figure Attribute: XP value=15000 File: SAREVO2.CRE Name: Sarevok Attribute: XP value=15000 File: DELTAN.CRE Name: Duke Eltan Attribute: XP value=12000 File: DRIZZT.CRE Name: Drizzt Attribute: XP value=12000 File: ANGELO.CRE Name: Angelo Attribute: XP value=10000 File: CADDER.CRE Name: Cadderly Attribute: XP value=10000
Near Infinity since v1.36-20150925 takes CREs' script names into account when searching for resource references. The script name of VALINO.CRE is "None", which is a widely used keyword in many resources. That's why you can see so many false positives in the search results. Unfortunately BCS resources are treated as simple text files by the search algorithm, without taking semantics into account. In the case of CH1CUT02.BCS, "None" is mentioned in the ChangeAIScript() action. I should probably add "None" to the ignore list in future releases to reduce the number of false positives.
Btw, Valinor appears to be an unused CRE resource in BG1.
@argent77, since the SHS is down I will make yet another request here If it's not a huge problem I'd like to ask for NI to use statdesc.2da with Display Special Effect Icon (142) and Prevent Special Effect Icon (169) spell effects (Parameter #2). Currently it shows "unknown" for any icons added by mod.
SPLPROT.2DA looks pretty complicated and is (currently) only used in IWD:EE. I'll have to look into it further before I can decide whether it's possible to implement it.
I can understand that alignment checks might have changed in IWDEE. However, lines 39 and 40 don't really make sense to me (Paladin is defined as 6 in CLASS.IDS). Am I interpreting the values correctly?
Second question: STAT 0x107 is defined as daytime. Which IDS file is used for this check?
It does indeed check for the fighter/mage class, instead of Paladins. The only spell that uses it is Cloud of Pestilence, blocking out those who should be immune to magical disease(Paladins), so it looks like SPLPROT has the wrong value.
0x107 doesn't appear to be implemented: X 0x107 1 1 X 0x107 1 5 X 0x107 1 8 X 0x107 1 9 X 0x107 1 10 X 0x107 1 11 X 0x107 0 1 X 0x107 0 5 X 0x107 0 8 X 0x107 0 9 X 0x107 0 10 X 0x107 0 11 all return false.
PRO resources contain a word-sized field at offset 0x2a, which is labeled as "Lance width" in DLTCEP's GemRB extension for PRO resources. Is this field supported in IWD:EE as well? I've seen SWAVE.PRO using a non-zero value at this offset.
Yes it is functional in IWD:EE. The field defines the proximity radius of the projectile fired, with a maximum value of 32767, anything above that goes negative and has no radius(never hits anything). Appears to (also/currently) require the "Pass Target" flag at 0x2c. Together they enable a single-target projectile cast at "target point" to actually hit a creature. Normally the targeting has to be "living actor" to hit something with a single-target projectile.
@argent77 I am wondering if I could get your permission to use your source code to make an online version of NE? Just so Android users can take online BAM and other files and edit them? I'd need help on the project, and I'm asking for courtesy. I am working on developing an android app using the source, so I would need help making a GUI for that. Thanks in advance, argent.
Near Infinity is an open source project licensed under the LGPL v2.1. Feel free to use Near Infinity's sources and resources in your own projects as long as they're following the license terms.
I don't have any experience with Android programming, so you are on your own in that regard. However, I'm happy to answer any NI-specific questions.
Unfortunately, I don't experience this issue, so I'm not sure what is going wrong. The wrapper shouldn't do anything to affect where java looks for the prefs file.
@subtledoctor LookAndFeel is a remnant of older NI versions and can be safely removed from the config file. More recent NI versions are using LookAndFeelClass. The table column and panel sizes are defined by TableColWidthAttr, TableColWidthOfs and TablePanelHeight. However I suspect a permission issue, a syntax error in the config file or an incompatible configuration state to be the more likely cause in your case. Does NI's debug console show anything in this regard?
Does it work when you start NearInfinity.jar directly? Do you see any errors when you start it from the command line (e.g. "java -jar NearInfinity.jar")?
Changes: - Fixed a bug in Reference Searcher for StringRefs. - Improved Reference Searcher for CRE resources to minimize the number of false positives. - Added new datatype used in IWD:EE and future patch versions of BG:EE and BG2:EE that dynamically generates an textual interpretation of SPLPROT.2DA entries for IWD-style IDS values. You can see it for opcodes 318, 324 and 326 as well as two fields in PRO resources when flag "IWD style check" has been enabled. - Replaced static list of portrait icon descriptions by a dynamic list generated from STATDESC.2DA. - Added tool tips to a number of flags (currently SPL/Exclusion flags, ARE/Area type, ITM/Usable by). - Better command line parameter support: Call "java -jar NearInfinity.jar -help" for more information. - Several minor fixes and improvements.
At a glance, I found two issues for the SPLPROT.2DA changes: Text issue: Match entries x and y / Not match entries x and y - functionally, these are "or" arguments, not "and" arguments.
PRO resources fields, with the "IWD style check" flagged: - Creature value fields(0x3c, 0x40) do not display their dynamic IDS listing when a "-1/specified value" is chosen in the Creature type field(0x3e, 0x42). - It works fine when the "IWD style check" is not flagged though, since it then combines the two fields(type and value) into a single field for the old eff/IDS format.
P.S. The code to support SPLPROT.2da and the opcodes/projectiles is already functional in BG2:EE, just the file itself is missing.
- Creature value fields(0x3c, 0x40) do not display their dynamic IDS listing when a "-1/specified value" is chosen in the Creature type field(0x3e, 0x42).
That's intentional. The code to dynamically change field types in NI is very complicated. In the case of PRO resources I would have to manage two nested dynamic field changes, which is currently a nightmare to implement. I might add this functionality in future releases though.
P.S. The code to support SPLPROT.2da and the opcodes/projectiles is already functional in BG2:EE, just the file itself is missing.
IWD-style fields in NI depend on the existence of the SPLPROT.2DA file, so you can already activate this field in BG2:EE if you create a copy of SPLPROT.2DA (and associated IDS files) in this game.
That's intentional. The code to dynamically change field types in NI is very complicated. In the case of PRO resources I would have to manage two nested dynamic field changes, which is currently a nightmare to implement. I might add this functionality in future releases though.
IWD-style fields in NI depend on the existence of the SPLPROT.2DA file, so you can already activate this field in BG2:EE if you create a copy of SPLPROT.2DA (and associated IDS files) in this game.
I added it as soon as Patch 1.3 hit, was just commenting that BG2EE isn't waiting on a patch to use it, just mods.
Entry 47 is defined as follows: "Not match entries 32 or 27", where entry 32 contains another indirection "Not match entries 1 or 11". Fully expanded, it results into: Not match (Not match (GENERAL/UNDEAD or RACE/MYCONID) or RACE/GOLEM). The static description is "Breathing", which should exclude all of the aforementioned races. However, expanded entry 47 contains a double negative, which results in a "Some of them are breathing". Or is it processed differently by the game engine?
Entry 48 is similar: "Match entries 32 or 27" and results into: Match (Not match (GENERAL/UNDEAD or RACE/MYCONID) or RACE/GOLEM). The static description is "Not breathing", which should exclude all but the aforementioned races. This rule also doesn't fully match the static description.
It's processed as you suspect, and the spells that use it are not working properly in game. Since Race:Myconid and Race:Golem are mutually exclusive, the Race:Golem check becomes irrelevant. Entry 47(Breathing) returns true only for General:Undead or Race:Myconid. Entry 48(Not Breathing) returns true for anything except General:Undead or Race:Myconid.
The only use of it I found in the vanilla game was a Mustard Jelly Vapor ability(slow+fatigue), granting protection(318) to entry 48(not breathing). Golems and goblins were immune, but skeletons were not.
- Made many classes thread-safe, which fixed most of the sporadically occuring errors in I/O-heavy operations. - Greatly increased speed of check routines on multi-core systems and fixed several bugs related to displaying false positives. - Greatly increased speed of search routines on multi-core systems. - Greatly increased speed of Mass Exporter on multi-core systems.
- Enforcing specific charset when reading filenames from chitin.key to correctly display filenames with special characters (mostly relevant when dealing with Infinity Animation's special prefixes). - Added a resource type "guess" routine for resources of unknown type or file extension. - Added label to ITM flags bit 12. - Check for unused files: Added check for WAV resources attached to strrefs. - Fixed a bug in resource reference fields, which didn't properly consider resources in extra directories (movies, music, ...). - Numeric input fields in structured resources allow both decimal and hexadecimal user input. Hexadecimal numbers can be entered with "0x" prefix or "h" suffix (e.g. 0x12ff, 12ffh or 12ff h). - Fixed a bug in Flag fields based on IDS entries (i.e. CRE->Status flags) - Fixed jumping to line of error/warning in script resources. - Several minor fixes.
I've been trying to make searchs by resource/file name, but it doesn't seem like either the search or advanced search functions allow that. Did I miss it? If not, it'd be a nifty feature to add to the already excellent NI.
It depends. How do you want to search for resources?
The Extended Search provides a number of specialized fields where you can select the resource to search for. Or you can use the "Custom filters" sections to search in fields not covered by the search mask.
If you want to find references to a specific resource, I'd recommend to open the resource you want to search for and select Find...->"references to this file" instead.
Thanks @argent77! What I wanted was to get a list of resources containing a certain string. For example, which creatures have "SU" in their resource name. Can I do that with the Extended Search?
Unfortunately, NI doesn't have such a feature. If you want to see a list of resources starting with a certain string, you can use the "Find resource" button (on top of the navigation bar).
For more complicated search patterns I'd recommend to write a WeiDU script instead. For example: BACKUP ~findresources/backup~
AUTHOR ~Myself~
BEGIN ~Find CRE resource names containing 'SU'~
NO_LOG_RECORD
COPY_EXISTING_REGEXP - NOGLOB ~^.*SU.*\.CRE$~ ~override~
PATCH_PRINT ~Found: %SOURCE_FILE%~
@argent77 Some more info/bugs on Projectile Files: - Secondary Projecile, Offset 0x214: This is using the wrong IDS file for its selection menu. Currently uses MISSILE.IDS, should use PROJECTL.IDS. I think it may be the only place the values in PROJECTL.IDS are actually used instead of MISSILE.IDS.
- Explosion Effect, Offset 0x217: Value "254" is used for custom projectiles. Can it be added to the default selection menu, or have this field read "FIREBALL.IDS" for its selection menu?
- Extended AoE Flags, Offset 0x240, bit 0x1000(12): This bit is set on many of the "IDPRO###" projectiles added for IWDEE support. Cannot discern what it does though, any idea?
- Extended AoE Flags, Offset 0x240, bit 0x8000(15), when combined with: Area Flags, Offset 0x200, bit 0x8000(15) - [Single Target] and Extended AoE Flags, Offset 0x240, bit 0x400(10) - [Use HD lookup] Switches the dice fields to lookup current Hit Points, instead of Hit Dice. I think it is treated as such: # of dice = Hit Point total dice size = Max HP per creature
- Secondary Projecile, Offset 0x214: This is using the wrong IDS file for its selection menu. Currently uses MISSILE.IDS, should use PROJECTL.IDS. I think it may be the only place the values in PROJECTL.IDS are actually used instead of MISSILE.IDS.
The "Secondary projectile" field in PRO resources is already using PROJECTL.IDS. Currently NI doesn't make use of MISSILE.IDS at all, but uses a hardcoded list as fallback solution for games without PROJECTL.IDS. Afaik, this list is only used for the "Projectile" fields in ITM and SPL ability structures.
- Explosion Effect, Offset 0x217: Value "254" is used for custom projectiles. Can it be added to the default selection menu, or have this field read "FIREBALL.IDS" for its selection menu?
Will be added. This field uses a hardcoded list of entries and can be easily expanded. I don't know if FIREBALL.IDS is used at all by the game.
The "Secondary projectile" field in PRO resources is already using PROJECTL.IDS. Currently NI doesn't make use of MISSILE.IDS at all, but uses a hardcoded list as fallback solution for games without PROJECTL.IDS. Afaik, this list is only used for the "Projectile" fields in ITM and SPL ability structures.
Okay, something is still off then. For example, "IDPRO214", the projectile for Incendiary Cloud, shows "IDPRO407.PRO (434)" in that field, when it actually uses "icloudb.pro". IDPRO407 is the projectile for Emotion Hope/Courage. "IDPRO407" is #433 in PROJECTL.IDS, and #434 in MISSILE.IDS "icloudb" is #434 in PROJECTL.IDS, and #435 in MISSILE.IDS
Every other projectile field I know of uses the values in MISSILE.IDS, easily noticed because both "0" and "1" are "none" (both in game and in NI). If they used PROJECTL.IDS, "0" would be "none", "1" would be "arrow". Does NI adjust the values(+1) in selection menu's that are drawn from PROJECTL.IDS? EDIT: Maybe the game does the same, since projectiles only need to be listed in PROJECTL.IDS to be used.
Comments
I'm getting a bit of an unexpected search result. In ToSC game, I use the navigation tree to go to CRE -> VALINO.CRE, go to the Edit tab, and select Find -> references to this file -> Default -> Search. The results are: However, I can not find any reference to Valino (or Valinor) in any of these files. I then go to Search -> Text Search -> 2DA using the menu bar at the top, and perform a search for "valino". No hits are found. Nor are any results found when performing a BCS Text Search for "valino". Any ideas?
And who the heck is Valinor, and why is he worth the second most XP of any CRE in the game? The only Valinor I am familiar with is Tolkien's, but further down that page a reference is made to a possible D&D connection:
Unfortunately BCS resources are treated as simple text files by the search algorithm, without taking semantics into account. In the case of CH1CUT02.BCS, "None" is mentioned in the ChangeAIScript() action. I should probably add "None" to the ignore list in future releases to reduce the number of false positives.
Btw, Valinor appears to be an unused CRE resource in BG1.
Another, more complicated one: SPLPROT.2da
Could that file also be read and used instead of a static list for its relevant opcodes?
0x107 doesn't appear to be implemented:
X 0x107 1 1
X 0x107 1 5
X 0x107 1 8
X 0x107 1 9
X 0x107 1 10
X 0x107 1 11
X 0x107 0 1
X 0x107 0 5
X 0x107 0 8
X 0x107 0 9
X 0x107 0 10
X 0x107 0 11
all return false.
It looks like GemRB uses a simple flag for stat 0x107 (daytime), so it's probably safe to assume that IWD:EE does the same (eventually).
The field defines the proximity radius of the projectile fired, with a maximum value of 32767, anything above that goes negative and has no radius(never hits anything). Appears to (also/currently) require the "Pass Target" flag at 0x2c. Together they enable a single-target projectile cast at "target point" to actually hit a creature. Normally the targeting has to be "living actor" to hit something with a single-target projectile.
I don't have any experience with Android programming, so you are on your own in that regard. However, I'm happy to answer any NI-specific questions.
Good luck with your project.
Does your prefs file have the following lines:
However I suspect a permission issue, a syntax error in the config file or an incompatible configuration state to be the more likely cause in your case. Does NI's debug console show anything in this regard?
Update: NearInfinity v1.36-20151023
Changes:- Fixed a bug in Reference Searcher for StringRefs.
- Improved Reference Searcher for CRE resources to minimize the number of false positives.
- Added new datatype used in IWD:EE and future patch versions of BG:EE and BG2:EE that dynamically generates an textual interpretation of SPLPROT.2DA entries for IWD-style IDS values. You can see it for opcodes 318, 324 and 326 as well as two fields in PRO resources when flag "IWD style check" has been enabled.
- Replaced static list of portrait icon descriptions by a dynamic list generated from STATDESC.2DA.
- Added tool tips to a number of flags (currently SPL/Exclusion flags, ARE/Area type, ITM/Usable by).
- Better command line parameter support: Call "java -jar NearInfinity.jar -help" for more information.
- Several minor fixes and improvements.
At a glance, I found two issues for the SPLPROT.2DA changes:
Text issue:
Match entries x and y / Not match entries x and y
- functionally, these are "or" arguments, not "and" arguments.
PRO resources fields, with the "IWD style check" flagged:
- Creature value fields(0x3c, 0x40) do not display their dynamic IDS listing when a "-1/specified value" is chosen in the Creature type field(0x3e, 0x42).
- It works fine when the "IWD style check" is not flagged though, since it then combines the two fields(type and value) into a single field for the old eff/IDS format.
P.S. The code to support SPLPROT.2da and the opcodes/projectiles is already functional in BG2:EE, just the file itself is missing.
Again, thank you.
Entry 47(Breathing) returns true only for General:Undead or Race:Myconid.
Entry 48(Not Breathing) returns true for anything except General:Undead or Race:Myconid.
The only use of it I found in the vanilla game was a Mustard Jelly Vapor ability(slow+fatigue), granting protection(318) to entry 48(not breathing). Golems and goblins were immune, but skeletons were not.
Update: NearInfinity v1.36-20151112
Changes:- Major overhaul of the code base:
- Greatly increased speed of check routines on multi-core systems and fixed several bugs related to displaying false positives.
- Greatly increased speed of search routines on multi-core systems.
- Greatly increased speed of Mass Exporter on multi-core systems.
- Enforcing specific charset when reading filenames from chitin.key to correctly display filenames with special characters (mostly relevant when dealing with Infinity Animation's special prefixes).
- Added a resource type "guess" routine for resources of unknown type or file extension.
- Added label to ITM flags bit 12.
- Check for unused files: Added check for WAV resources attached to strrefs.
- Fixed a bug in resource reference fields, which didn't properly consider resources in extra directories (movies, music, ...).
- Numeric input fields in structured resources allow both decimal and hexadecimal user input. Hexadecimal numbers can be entered with "0x" prefix or "h" suffix (e.g. 0x12ff, 12ffh or 12ff h).
- Fixed a bug in Flag fields based on IDS entries (i.e. CRE->Status flags)
- Fixed jumping to line of error/warning in script resources.
- Several minor fixes.
The Extended Search provides a number of specialized fields where you can select the resource to search for. Or you can use the "Custom filters" sections to search in fields not covered by the search mask.
If you want to find references to a specific resource, I'd recommend to open the resource you want to search for and select Find...->"references to this file" instead.
For more complicated search patterns I'd recommend to write a WeiDU script instead. For example:
BACKUP ~findresources/backup~ AUTHOR ~Myself~ BEGIN ~Find CRE resource names containing 'SU'~ NO_LOG_RECORD COPY_EXISTING_REGEXP - NOGLOB ~^.*SU.*\.CRE$~ ~override~ PATCH_PRINT ~Found: %SOURCE_FILE%~
Some more info/bugs on Projectile Files:
- Secondary Projecile, Offset 0x214: This is using the wrong IDS file for its selection menu. Currently uses MISSILE.IDS, should use PROJECTL.IDS. I think it may be the only place the values in PROJECTL.IDS are actually used instead of MISSILE.IDS.
- Explosion Effect, Offset 0x217: Value "254" is used for custom projectiles. Can it be added to the default selection menu, or have this field read "FIREBALL.IDS" for its selection menu?
- Extended AoE Flags, Offset 0x240, bit 0x1000(12): This bit is set on many of the "IDPRO###" projectiles added for IWDEE support. Cannot discern what it does though, any idea?
- Extended AoE Flags, Offset 0x240, bit 0x8000(15), when combined with:
Area Flags, Offset 0x200, bit 0x8000(15) - [Single Target] and
Extended AoE Flags, Offset 0x240, bit 0x400(10) - [Use HD lookup]
Switches the dice fields to lookup current Hit Points, instead of Hit Dice.
I think it is treated as such:
# of dice = Hit Point total
dice size = Max HP per creature
"IDPRO407" is #433 in PROJECTL.IDS, and #434 in MISSILE.IDS
"icloudb" is #434 in PROJECTL.IDS, and #435 in MISSILE.IDS
Every other projectile field I know of uses the values in MISSILE.IDS, easily noticed because both "0" and "1" are "none" (both in game and in NI). If they used PROJECTL.IDS, "0" would be "none", "1" would be "arrow". Does NI adjust the values(+1) in selection menu's that are drawn from PROJECTL.IDS? EDIT: Maybe the game does the same, since projectiles only need to be listed in PROJECTL.IDS to be used.