Increasing existing affects in characters
#41
Posted 02 November 2011 - 06:42 PM
God damn. So all of those years, putting 150 points in pickpocket... all useless??
#42
Posted 02 November 2011 - 09:25 PM
who knows for sure anymore....
My working mods:
an AI Party Script for BG2 game engine DOWNLOAD LINK ONLY!
Interactive Tweaks for BG series with some IWD support. DOWNLOAD LINK ONLY!
Rest For 8 Hours an IWD mod
-------------------------------------------
My contributions: BG1Fixpack, BG1Tweaks
On Hold: Solestia an NPC for SOA
-------------------------------------------
My website: http://sasha-altheri...s.com/index.htm
#43
Posted 03 November 2011 - 11:51 AM
What happens if i have a single, minimized section repeated instead of 4. Like this:
IF ActionListEmpty() AreaCheck("%area%") Range("%trigger%",3) THEN RESPONSE #100 RemoveTraps("%trigger%") PickLock("%trigger%") ActionOverride(Myself,ChangeAIScript(gt#thief,GENERAL)) END
The checks for hotkey and LOCKPICK > 1 OR TRAPS > 1 are in the script "parentscript" before the redirect, to keep normal performance at the maximum.
I removed the "disarmed" check so it triggers on a normal lock still, but as it is a hotkey it is not constantly and as it has a visual feedback, it should make no difference. Apparently, IESDP says that "unlocked" is broken anyway so off it goes.
The only uncertainty is what happens when i try to "open locks" on what is only a trap, or "pick lock" on a trap. Would it just say the usual "roll failed" thing.
If the engine does the sane thing (ignore it) then things should work ok no?
Then, not taking in consideration if you can disarm it or not in the scripts (I confess that the Weidu code is giving me trouble, most of these numeric constants and ranges i have no clue why they are being checked)
PATCH_IF ( (("trapped" & 0x01) = 0x01) OR ((%flag% BAND 0b001) = 0b001)) THEN BEGIN //trapped or locked FOR ("i2" = 0x00; "i2" < 0x20; "i2" += 0x01) BEGIN READ_BYTE ("co" + "i1" + "i2") "char" READ_ASCII ("co" + "i1" + "i2") "char2" (1) PATCH_IF (~%char%~ = 32) AND (~%char2%~ STRING_COMPARE_REGEXP ~ ~ =0) BEGIN SPRINT ~char2~ ~_~ END PATCH_IF (%char% != 0) BEGIN SPRINT ~co_name~ ~%co_name%%char2%~ END PATCH_IF (("char" = 0x00) AND ("i2" = 0x00)) THEN BEGIN SET "i2" = 0x20 END ELSE PATCH_IF (("char" = 0x00) AND ("i2" > 0x00)) THEN BEGIN READ_ASCII ("co" + "i1" + 0x00) ~trigger~ ("i2") SPRINT ~cont_var~ ~ab_%area%_%co_name%~ INNER_ACTION BEGIN EXTEND_BOTTOM ~abparty.bs~ ~inlined/thief_hk_lock&trap.baf~ EVALUATE_BUFFER END SET "i2" = 0x20 END END END
If there is a annoying message (or just for performance) - because of trap disarmed or lockpick fail, i'd use your trick to multiplex the block into 3, trap, lock and a additional block to shortcircuit the rest if those two triggered.
Like so:
IF //emitted if found trap while going through the areas ActionListEmpty() AreaCheck("%area%") !Disarmed("%traptrigger%") Range("%traptrigger%",3) THEN RESPONSE #100 SetGlobal("triggerpresent", "LOCALS", 1) RemoveTraps("%traptrigger%") Continue() END IF //emitted found lock while going through the areas ActionListEmpty() AreaCheck("%area%") Range("%locktrigger%",3) THEN RESPONSE #100 SetGlobal("triggerpresent", "LOCALS", 1) PickLock("%locktrigger%") Continue() END IF //emitted if found any of both above while going through the areas Global("triggerpresent","LOCALS", 1) THEN RESPONSE #100 SetGlobal("triggerpresent", "LOCALS", 0) ActionOverride(Myself,ChangeAIScript(gt#thief,GENERAL)) END
They'd have to be appended consecutively - is this possible?.
And append the unconditional return to the normal script at the end of course.
The Weidu hieroglyphs are not being kind.
Edited by i30817, 03 November 2011 - 12:25 PM.
#44
Posted 03 November 2011 - 02:59 PM
if you want to remove traps and pick locks you need FOUR blocks of code because there are four distinct combinations
1) trapped only
2) locked only
3) trapped & locked
4) locked & trap can't be disarmed
I've since thought of something that should be included so that your thief doesn't bother with traps or locks it can't handle...
ok.. that is fine for the basics my new idea tho needs the stat checks hereThe checks for hotkey and LOCKPICK > 1 OR TRAPS > 1 are in the script "parentscript" before the redirect, to keep normal performance at the maximum.
1) trapped only
2) locked only
3) trapped & locked
4) locked & trap can't be disarmed (you can point to the locked only script block instead, but the weidu patching code has to look for these separately)
Each script block can be inside the tp2 file via the inline method or as external .baf files
the area patching code which is used to read the necessary data and apply the necessary script block as needed. You'll need to check into how to make it BGT, EasyTutu & BG2 friendly. I know how to do EasyTutu but not BGT
also when G3 is not down due to spammers get a copy of the IESDP, it'll help you in regards to offsets being read or written in weidu code.
Also I removed any references to using a global variable since you aren't going that route. Part of the code you were being confused on was set to build the global variable name character by character and replace any spaces with an underscore. since you aren't using that you won't need it.....
My working mods:
an AI Party Script for BG2 game engine DOWNLOAD LINK ONLY!
Interactive Tweaks for BG series with some IWD support. DOWNLOAD LINK ONLY!
Rest For 8 Hours an IWD mod
-------------------------------------------
My contributions: BG1Fixpack, BG1Tweaks
On Hold: Solestia an NPC for SOA
-------------------------------------------
My website: http://sasha-altheri...s.com/index.htm
#45
Posted 03 November 2011 - 03:22 PM
if you want to remove traps and pick locks you need FOUR blocks of code because there are four distinct combinations
1) trapped only
2) locked only
3) trapped & locked
4) locked & trap can't be disarmed
Yea... that would be more efficient. I'm going to edit what i have now for that.
(copied liberally from both your code and ce#knock)
Quick questions; in the code following, i'm compiling baf, and i think weidu will ouput bcs.
Is a bcs file acceptable input for
ActionOverride(Myself,ChangeAIScript(gt#act,GENERAL))
Or do they have to have the extension bs? (and how to get weidu to output that?)
Also, what happens when i do this at the end of the script file:
IF True() THEN RESPONSE #100 ActionOverride(Myself,ChangeAIScript(gt#thief,GENERAL)) Continue() //doesn't matter, might as well run the AI ENDI changed the script back to normal (ok), and continued (it's the end of the file remember).
What i want is not to "lose" the round, so normal DEFAULT AI can do what it wants. Does it work?
Edited by i30817, 03 November 2011 - 04:18 PM.
#46
Posted 03 November 2011 - 03:45 PM
Is !Exists([ENEMY]) a original limitation of disarm traps and lockpick?
I mean, you can't use them when enemies are around with the GUI in the game? Because i can think of a few reasons to use this ability while a enemy you somehow do not want to kill is around.
There are also locks that can't be opened in addition to traps that can't be disarmed?
(yes, i remember them, but they probably can be ignored and let the use lockpick - they have a 4th wall shattering message).
Edited by i30817, 03 November 2011 - 04:20 PM.
#47
Posted 03 November 2011 - 05:05 PM
Can this be 100 (0x64) as the trap removal difficulty and lockpick difficulty and be undetectable? (to remove those from the list too).
Edited by i30817, 03 November 2011 - 05:05 PM.
#48
Posted 03 November 2011 - 05:14 PM
bs = bcs in functionalityIs a bcs file acceptable input for
ActionOverride(Myself,ChangeAIScript(gt#act,GENERAL))
Or do they have to have the extension bs? (and how to get weidu to output that?)
bs is only used for those scripts you want to show in the party script selection and are placed in the scripts directory rather than in override
what exactly are you wanting? are you wanting the script to change every time it is parsed when nothing else above it was valid? If nothing in the script is valid, it would automatically go down to whatever script is in the default slot and parse that for possible actions before restarting at the top of the script chain. Putting that block in would actually prevent any default script ai from processing unless the gt#thief script does not have a similar block and in the latter case it would have to wait till all the above scripts were processed... I think best NOT to have that block. Tho I see now that you are just building one massive script with support for all traps and locks in all areas. yeah I guess you do want to swap it out if there isn't anything else valid to perform.Also, what happens when i do this at the end of the script file:
IF True() THEN RESPONSE #100 ActionOverride(Myself,ChangeAIScript(gt#thief,GENERAL)) Continue() //doesn't matter, might as well run the AI END
I changed the script back to normal (ok), and continued (it's the end of the file remember).
What i want is not to "lose" the round, so normal DEFAULT AI can do what it wants. Does it work?
One question tho: How is it all getting kicked off? by item? by another script? by dialog? I think that if it is an equipped item then you may want to use the Race slot for the script with the hotkey and build in the ability to swap the script in and out of general by using the hotkey. I understand there are a couple of items that switch the race slot too, are you trying to allow for those items to be used as well? If so, then I guess you gotta stick with the general slot only.
As far as your long list of code....
//bg1 compatibility OUTER_SPRINT ie_file ~ar~ ACTION_IF (FILE_EXISTS_IN_GAME ~FW2600.are~) THEN BEGIN OUTER_SPRINT ie_file ~fw~ ENDthis is default BG2 with compatibility for Tutu/EasyTutu not compatibility for BG1
//don't know why this would matter but better safe... INNER_PATCH_SAVE trigger ~%name%~ BEGIN REPLACE_TEXTUALLY ~ ~ ~~ ENDThis wasn't available years ago when I put my code together, hence the byte by byte read I had to do. I noticed you are using some global variable checks for to presumably keep the thief from trying to do the same trap or lock even when already done. Some of the objects have spaces in the name (example "Container 1") the spaces need to be replaced. else the global variable won't work (can't have spaces) Not sure if ~ ~ replaced with ~~ would make much difference. I'd switch it to INNER_PATCH_SAVE trigger ~%name%~ BEGIN REPLACE_TEXTUALLY ~ ~ ~_~ END but then don't use the same variable for the global check & the object name so it would need to become INNER_PATCH_SAVE gvtrigger ~%name%~ BEGIN REPLACE_TEXTUALLY ~ ~ ~_~ END and then in all your global checks adjust it to be gt#%gvtrigger% or leave it at trigger and just change all your object name spots to %name%
It looks like you don't want shared blocks for those objects that are both locked and trapped. I suppose it is easier to just look for trapped and then just locked. I guess I'm harder on myself with code to make a more realistic in game action. Why would I remove the trap, do something else and then come back to pick the lock? I'd just do it all at once, but that's me....
EXTEND_BOTTOM ~gt#act.baf~ ~gt#trp~all of these are a problem
EXTEND_BOTTOM will append baf or bcs data to the bottom of an existing bcs or bs script NOT to a baf file. Also, since variables change with each object and area file you have to compile the data into bcs format while the variables are valid for the current block you built. And since Extend bottom will also create a script that doesn't exist.
All you need to do is
1) adjust EXTEND_BOTTOM ~gt#act.baf~ ~gt#trp~ to the following
EXTEND_BOTTOM ~gt#act.bcs~ ~gt#trp~ EVALUATE_BUFFER // you need this to get the current variables translated into the correct data2) and then this line COMPILE ~general_thieving\gt#act.baf~ becomes moot and can be deleted
---------------------------
It's what I chose to do. I personally didn't want to be doing such actions via script when there were enemies around. Manual control was preferable in such situations.Is !Exists([ENEMY]) a original limitation of disarm traps and lockpick?
I mean, you can't use them when enemies are around with the GUI in the game? Because i can think of a few reasons to use this ability while a enemy you somehow do not want to kill is around.
Oh back to that code for a minute. right now it is unrunable since it isn't set up properly. After the VERSION tag you'll need to add more stuff before you can get to the actual code. You should have something about language (at least to allow for compatibility to other languages if other people would like to translate it for you). Also you have to have the BEGIN ~component name~ before you can do any of the stuff you currently have after the VERSION line
-------------------------------
It could be worth looking into...There is something in doors called "0x002c 2 (word) Trap detection difficulty".
Can this be 100 (0x64) as the trap removal difficulty and lockpick difficulty and be undetectable? (to remove those from the list too).
My working mods:
an AI Party Script for BG2 game engine DOWNLOAD LINK ONLY!
Interactive Tweaks for BG series with some IWD support. DOWNLOAD LINK ONLY!
Rest For 8 Hours an IWD mod
-------------------------------------------
My contributions: BG1Fixpack, BG1Tweaks
On Hold: Solestia an NPC for SOA
-------------------------------------------
My website: http://sasha-altheri...s.com/index.htm
#49
Posted 03 November 2011 - 05:43 PM
Annnnnd i'm confused about door detection. Your code has this comment for this line (doors):
READ_LONG ("do" + "i1" + 0x28) "flag" //flag bit 1 'on' = locked bit 3 'on' = trap detectable
This old version of IESDP says that bit is unknown (ok) and has this line for a later line (for doors both). Not ok:
0x0028 4 (dword) Bit 3 : unknown
0x006c 2 (word) Trap detection difficulty
http://iesdp.com/IesdpOld/
Either trap detection diff does nothing or does nothing to doors, or this old version of IESDP was wrong.
Why would I remove the trap, do something else and then come back to pick the lock? I'd just do it all at once, but that's me....
Yeah, i'm doing that now.
EXTEND_BOTTOM will append baf or bcs data to the bottom of an existing bcs or bs script NOT to a baf file.
I think this might be wrong or outdated. The description (of EXTEND_TOP, but still)
"Loads existingFile (which may be BAF or BCS), prepends all of newBCS to the top of it, applies all of the patches, and then copies it to the override folder. User variables in the filenames existingFile and newFile are replaced by their values. Use EVALUATE_BUFFER if you want to evaluate variables inside the body of newFile before parsing it."
Of course existingfile is not on the prototype:
"EXTEND_TOP existingBCS newFile patch list"
But what else can it be?
But still, now that i read it with more attention, i see that it actually compiles the file...
Is current file.
Modulo that, i've got this for now.
Edited by i30817, 03 November 2011 - 07:09 PM.
#50
Posted 03 November 2011 - 09:01 PM
I'm dead serious when G3 gets up and running again download the copy there. The one I got from there before I left the modding scene some 2+ years ago is dated 2007 and I know that there have been a few things noted and adjusted since then...
Might be a bit hard to read but here is the ARE data from the IESDP version I have locally...
On to your code...
READ_ASCII 0x0 area (4) NULL massive fail. all this is on every area file is 'AREA' it's used in conjunction with the next four bytes to determine what version of area file it is. If you use this it will make every single one of the area checks return false.
The use of the 'area' variable requires that you need the actual filename of the area. Ergo you need to replace that line with SPRINT ~area~ ~%SOURCE_RES% this assigns the resource reference sans extension to the designated variable
I think that is the only thing that I've seen noticeably wrong. anything else is gonna be found by trial and error when installing or if you change things up again based on seeing the newer IESDP
My working mods:
an AI Party Script for BG2 game engine DOWNLOAD LINK ONLY!
Interactive Tweaks for BG series with some IWD support. DOWNLOAD LINK ONLY!
Rest For 8 Hours an IWD mod
-------------------------------------------
My contributions: BG1Fixpack, BG1Tweaks
On Hold: Solestia an NPC for SOA
-------------------------------------------
My website: http://sasha-altheri...s.com/index.htm
#51
Posted 04 November 2011 - 03:31 AM
OUTER_SET locked = ((flags & 0x1) = 0x1)
to later use it like this:
PATCH_IF ((~%locked%~ = 1) ....) BEGIN
?
Edited by i30817, 04 November 2011 - 03:45 AM.
#52
Posted 04 November 2011 - 04:14 AM
not if you are setting it prior to getting the value for the 'flags' variableCan i do this:
OUTER_SET locked = ((flags & 0x1) = 0x1)
to later use it like this:
PATCH_IF ((~%locked%~ = 1) ....) BEGIN
?
you could set it inside the patch after each read of the 'flags' variable but that would only be for "coding convenience" and not really necessary....
My working mods:
an AI Party Script for BG2 game engine DOWNLOAD LINK ONLY!
Interactive Tweaks for BG series with some IWD support. DOWNLOAD LINK ONLY!
Rest For 8 Hours an IWD mod
-------------------------------------------
My contributions: BG1Fixpack, BG1Tweaks
On Hold: Solestia an NPC for SOA
-------------------------------------------
My website: http://sasha-altheri...s.com/index.htm
#53
Posted 04 November 2011 - 05:39 AM
ie; can i write:
PATCH_IF (~%locked%~ ....)
instead of
PATCH_IF ((~%locked%~ = 1) ....)
?
In c for instance, most data can be used in a if
Where do you think i should ask for clarification about these engine questions:
1) Does trap detection difficulty work like the other difficulties (100% impossible)?
2) If 1) why do regions have a "detectable" (sic) flag.
3) Is the "detectable" from 2) for the region and not "trap detection", so are marking different things from "trap detection difficulty", that it has too?
4) IF 3) why do doors have a flag with "bit 3: Trap detectable" (notice that unlike regions, it specifies "trap"), AND also have a "Trap detection difficulty"?
Edited by i30817, 04 November 2011 - 07:02 AM.
#54
Posted 04 November 2011 - 10:13 AM
would have to see the specific argument that is required to be true for the patch block to be executedConvenience is a beautiful thing. Does it work like booleans in most languages?
ie; can i write:
PATCH_IF (~%locked%~ ....)
instead of
PATCH_IF ((~%locked%~ = 1) ....)
?
i have never seen a variable used alone to signal a patch block to fire. it needs to be compared to something in order to return true or false. if the variable has no bearing on what you are wanting to do, then there is no need to read it or include it in the patch if statement.
the iesdp section at G3 if it ever comes back up, otherwise i have no idea.Where do you think i should ask for clarification about these engine questions:
1) Does trap detection difficulty work like the other difficulties (100% impossible)?
2) If 1) why do regions have a "detectable" (sic) flag.
3) Is the "detectable" from 2) for the region and not "trap detection", so are marking different things from "trap detection difficulty", that it has too?
4) IF 3) why do doors have a flag with "bit 3: Trap detectable" (notice that unlike regions, it specifies "trap"), AND also have a "Trap detection difficulty"?
1. as far as i know.... yes
2. region triggers are used for more things than just traps, if all of them were detectable well lets just say the game would be a mess. I could go into detail but not with a sleeping almost 2yr old occupying one arm
3. yes and no. if it is detectable most likely it is a trap. if it is not detectable, then it performs another function (tho some can be just as bad as traps)
4. because your basic door is either trapped or not trapped. there is a separate spot that handles whether the door is secret and isn't shown till the PC finds it.
the trap detection difficulty is what is used to determine what stat value in remove traps a thief needs to always successfully remove the trap. whereas the detectable flag bit determines whether find traps and the like can make it visible....
My working mods:
an AI Party Script for BG2 game engine DOWNLOAD LINK ONLY!
Interactive Tweaks for BG series with some IWD support. DOWNLOAD LINK ONLY!
Rest For 8 Hours an IWD mod
-------------------------------------------
My contributions: BG1Fixpack, BG1Tweaks
On Hold: Solestia an NPC for SOA
-------------------------------------------
My website: http://sasha-altheri...s.com/index.htm
#55
Posted 04 November 2011 - 01:39 PM
CheckStatGT(Myself,1,TRAPS)
TRAPS is the stat the affects the rate of success of both FindTraps() and RemoveTrap(..) ... or FindTraps uses DETECTILLUSION?
I can't tell from IESDP. It's not logical that it is used in both places, so i've think i've got a bug. Which one can i use to find the skills, i'm not sure now.
Edit: nvm checked the game and it is. How strange.
I'd also like to make a optional component to remove some of the sounds that will get annoying with the mod. The hideinshadows mods that NPC with voices that are thieves have is very annoying if you are "scouting" (hideinshadows and findtraps at the same time trick - even though i have a only stealth mode).
DISABLE_FROM_KEY would be the best way to clean up that right? How can i find those references?
Edited by i30817, 04 November 2011 - 01:52 PM.
#56
Posted 04 November 2011 - 01:58 PM
I'm not sure what you are saying. Are you saying that there are some mods that come equipped with sound files that are triggered under certain thief conditions? If that is the case, you probably need to look at their code and see how they put the sounds in so that you can develop an option to remove them... else and for all honesty tis a better route ask the other mod author to add in the option to not have those sounds. or to assist you in developing such a component if they are okay with your mod removing them as an option.... Otherwise idk what you are asking...I'd also like to make a optional component to remove some of the sounds that will get annoying with the mod. The hideinshadows mods that NPC with voices that are thieves have is very annoying if you are "scouting" (hideinshadows and findtraps at the same time trick - even though i have a only stealth mode).
this is a new weidu feature for me. idk what it does.DISABLE_FROM_KEY would be the best way to clean up that right? How can i find those references?
My working mods:
an AI Party Script for BG2 game engine DOWNLOAD LINK ONLY!
Interactive Tweaks for BG series with some IWD support. DOWNLOAD LINK ONLY!
Rest For 8 Hours an IWD mod
-------------------------------------------
My contributions: BG1Fixpack, BG1Tweaks
On Hold: Solestia an NPC for SOA
-------------------------------------------
My website: http://sasha-altheri...s.com/index.htm
#57
Posted 04 November 2011 - 02:12 PM
The main script code right now:
EDIT;
I think i'm going to ignore that "problem", maybe add a only findtraps mode...
Edited by i30817, 04 November 2011 - 04:27 PM.
#58
Posted 04 November 2011 - 05:28 PM
hmm one way to find out is to play the game with strref =1 set in the baldur.ini file that will display the strref for all the text in the game and so any sounds played associated with text or associated with no text but called up and played as if it were a text string would also be shown. You could jot those strrefs down and then in your optional component 'update' the game text by replacing those strrefs without the associated sound file.
but then again it could turn out to be some hardcoded thing that you might have to ask about over in the ToBex
My working mods:
an AI Party Script for BG2 game engine DOWNLOAD LINK ONLY!
Interactive Tweaks for BG series with some IWD support. DOWNLOAD LINK ONLY!
Rest For 8 Hours an IWD mod
-------------------------------------------
My contributions: BG1Fixpack, BG1Tweaks
On Hold: Solestia an NPC for SOA
-------------------------------------------
My website: http://sasha-altheri...s.com/index.htm
#59
Posted 04 November 2011 - 06:19 PM
http://www.shsforums...post__p__473156
"XXXXXXX5.wav : Successfully Hid In shadows"
Edit: tried to find the "now you see me, now you don't" sound that Imoen uses, it didn't follow the naming scheme (IMOEN47). So that should only be for the protagonist.
Eeeh.
Edited by i30817, 04 November 2011 - 06:31 PM.
#60
Posted 04 November 2011 - 07:41 PM
EDIT: unless you want the text to show, but no sound... then you gotta look up every npc that you want to remove the sound on and replace the string with sound with a soundless string. off the top of my head it sounds like a manual task, but there might be a way to do it on the fly with weidu....
Edited by Sasha Al'Therin, 04 November 2011 - 07:44 PM.
My working mods:
an AI Party Script for BG2 game engine DOWNLOAD LINK ONLY!
Interactive Tweaks for BG series with some IWD support. DOWNLOAD LINK ONLY!
Rest For 8 Hours an IWD mod
-------------------------------------------
My contributions: BG1Fixpack, BG1Tweaks
On Hold: Solestia an NPC for SOA
-------------------------------------------
My website: http://sasha-altheri...s.com/index.htm