Jump to content

argent77

Modders
  • Posts

    1,596
  • Joined

Everything posted by argent77

  1. This is a patch function that can be used to add multiple effects to items or spells without much effort. It uses a simple syntax with short keywords to keep effect definitions plain and simple. I'm currently using it to dynamically add many game dependent effects to spells. The function code: Example (adds fully configured effects "Display String" and "Play Visual Effect" to a spell): COPY ~%MOD_FOLDER%/spells/myspell.spl~ ~override~ LPF a7_auto_apply_spl_effect INT_VAR // some predefined parameters for all effects def_target = 2 // Preset target def_savetype = 1 // Save vs. Spell def_savebonus = "-2" STR_VAR function_name = ~ADD_SPELL_EFFECT~ effect_codes = ~op=139,tmg=1,p1=8203;op=215,tmg=1,dur=2,p2=1,res=ICARMOR~ END
  2. Look like you're right. The black screen only lasts about 11 or 12 seconds before it is cleared. You could add another "FadeToColor([0.0],0)" after about 10 seconds to keep the screen black a while longer.
  3. I have noticed two issues with SR v4beta15: 1. The mod fails to install in BGEE (with or without SoD) because of a missing resource SPIN203.SPL. 2. SR seems to reset exclusion flags of all Wild Mage related spells (SPWI124, SPWI222 and SPWI723), so that they're available for all mages and sorcerers.
  4. I would prefer to see it integrated into Tweaks Anthology since a mod of this small size runs the risk of getting lost in the vast number of other mini-mod releases.
  5. Yeah, this action looks like a quick way to switch between thematically independent parts of the story. I can imagine the next IWDEE patch will also make use of it for the HoW and TotLM expansions.
  6. 372 MoveToCampaign(S:Campaign*) This action reinitializes important default values and resource references based on definitions from campaign.2da, such as world scripts, save folder name or starting area. Campaign refers to the name defined in the first column of that table. It is currently used to switch from BGEE to the Siege of Dragonspear campaign. 373 AddWorldmapAreaFlag(S:Area*,I:Type*WMPFLAG) This action can be used to set flags of an area on the worlmap that control visibility or accessibility. Flags are taken from wmpflag.ids. 374 RemoveWorldmapAreaFlag(S:Area*,I:Type*WMPFLAG) This action can be used to clear flags of an area on the worlmap that control visibility or accessibility. Flags are taken from wmpflag.ids. 377 SetGlobalTimerRandom(S:Name*,S:Area*,I:Min*GTimes,I:Max*GTimes) This action sets a global timer to a random value within the range of Min and Max specified by the 3rd and 4th parameter. Both parameters accept symbolic values from gtimes.ids. The timer is checked by the GlobalTimerExpired() and GlobalTimerNotExpired() triggers.
  7. 0x40F8 CanEquipRanged() Returns true only if the active creature can switch to a ranged weapon that is ready for use (e.g. a throwing weapon, such as darts, or a launcher with corresponding ammo, such as bow and arrow). 0x40F9 ImmuneToSpellLevel(O:Object*,I:Level*) Returns true if the specified object is immune to spells of the level specified by the 2nd parameter. 0x40FB IsForcedRandomEncounterActive(S:Area*) Returns true only if a random encounter to the specified area has been initialized by a preceding call of ForceRandomEncounter() or ForceRandomEncounterEntry(). 0x4103 CheckItemSlot(O:Object*,S:Item*,I:Slot*SLOTS) Returns true only if the item specified in the 2nd parameter can be found in the inventory slot (taken from SLOTS.IDS) of the specified object. 0x4104 CurrentAmmo(S:ResRef*,O:Object*) Returns true only if the specified object has a ranged weapon with the ammo specified by ResRef equipped.
  8. The following triggers appear to be related to the unselectable state from script action MakeUnselectable() or effect opcode 365: 0x406D UnselectableVariable(I:Num*) Returns true only if the active creature is for exactly the specified number of ticks (1/15th seconds) left under the effect of the script action MakeUnselectable() or opcode 365. Note: By default in BG2EE creatures stop processing scripts while under effect of the script action MakeUnselectable(). 0x406E UnselectableVariableGT(I:Num*) Returns true only if the active creature is for more than the specified number of ticks (1/15th seconds) left under the effect of the script action MakeUnselectable() or opcode 365. Note: By default in BG2EE creatures stop processing scripts while under effect of the script action MakeUnselectable(). 0x406F UnselectableVariableLT(I:Num*) Returns true only if the active creature is for less than the specified number of ticks (1/15th seconds) left under the effect of the script action MakeUnselectable() or opcode 365. Note: By default in BG2EE creatures stop processing scripts while under effect of the script action MakeUnselectable().
  9. This info is based on the GiveOrder() action description and verified by a quick test in BG1EE: 0x0006 ReceivedOrder(O:Object*,I:Order ID*) This trigger is used in conjunction with the GiveOrder action, and works in a similar way to the Heard trigger. Only one creature at a time responds to an order, and creatures do not detect their own orders. The creature must be in visual range for this trigger to work.
  10. Looks like ModalStateObject() does exactly what the name suggests: 0x40F1 ModalStateObject(O:Object*,I:ModalState*Modal) Returns true only if the specified object is in the state/mode specified. e.g. detecting traps.
  11. Unfortunately the PST section doesn't look much better in this regard.
  12. I assume G/GGT/GLT are all using GLOBAL scope implicitly (same as the SG() action counterpart)?
  13. I'll start with a first batch of actions. 376 DisplayStringNoNameDlg(O:Object*,I:StrRef*) This action behaves like DisplayStringNoName, except that it also works in dialogues. It displays the strref specified by the StrRef parameter in the message window, without attributing the text to an object. 378 ExportParty(S:Name*) This action will export all exportable characters of the party into the "Characters" folder of the game. "Name" specifies the prefix for each exported character, which is expanded by the character's party slot number. This action creates both .CHR and .BIO files. 387 SetCutSceneBreakable(I:Breakable*BOOLEAN) This action controls whether a cutscene can be skipped by pressing ESC. When set to TRUE the cutscene can be interrupted. Set it to FALSE to prevent the cutscene from being interrupted. When properly prepared a skipped cutscene can be detected and completed in a safe manner. Code snippet of the BG2EE opening cutscene (NEWGAME.BCS): IF True() THEN RESPONSE #100 CutSceneId("CSJon") SetAreaScript("cutskip2",OVERRIDE) SetGlobal("BD_CUTSCENE_BREAKABLE","GLOBAL",1) SetCutSceneBreakable(TRUE) CreateCreatureEffect("M05PCSPY","",[3374.3068],S) // more script actions... SetCutSceneBreakable(FALSE) SetGlobal("BD_CUTSCENE_BREAKABLE","GLOBAL",0) SetAreaScript("",OVERRIDE) ActionOverride("Imoen",EndCutSceneMode()) ActionOverride("Imoen",Dialogue(Player1)) DestroySelf() END SetAreaScript("cutskip2",OVERRIDE) defines a "failsafe" script to execute when the cutscene has been skipped. The OVERRIDE slot ensures it has precedence over the default area script. SetGlobal("BD_CUTSCENE_BREAKABLE","GLOBAL",1) is used to identify the cutscene that has been interrupted (if the failsafe script handles more than one cutscene). 388 DisplayStringHeadNoLog(O:Object*,I:StrRef*) This action displays the string specified by the StrRef parameter over the head of the given object on the game-screen, but not in the message log. 389 SetItemFlags(S:ItemName*,I:Flags*INVITEM,I:SetReset*BOOLEAN) This action sets or resets specific item flags, such as "IDENTIFIED" or "STOLEN". Setting the third parameter to TRUE sets the bit, setting it to FALSE clears the bit. Example from Siege of Dragonspear (BDINTRO.BCS): IF Global("SOD_fromimport","GLOBAL",0) !HasItemEquiped("ring05",Player1) // Sandthief's Ring InMyArea("safana") // Safana THEN RESPONSE #100 CutSceneId(Player1) GiveItemCreate("ring05","safana",7,0,0) // Sandthief's Ring ActionOverride("safana",SetItemFlags("ring05",IDENTIFIED,TRUE)) // Sandthief's Ring XEquipItem("ring05","safana",SLOT_RING_RIGHT,EQUIP) // Sandthief's Ring END 412 ZoomLock(I:Lock*BOOLEAN) This action can be used to set zoom to 100%. When set to TRUE zoom factor is locked at 100% and can not be changed by user input. Setting it to FALSE restores the original zoom factor. The zoom lock state is not saved.
  14. IESDP does not yet provide descriptions for many script actions introduced by the more recent Enhanced Editions patches. This topic is intended to present and discuss descriptions for new or existing script actions, so that they can be added to IESDP eventually. The following BG(2)EE actions are still lacking a meaningful description: The following PSTEE actions are not listed on IESDP yet:
  15. IESDP does not yet provide descriptions for a number of script triggers. This topic is intended to present and discuss descriptions for new or existing script triggers, so that they can be added to IESDP eventually. The following BG(2)EE triggers are still lacking a meaningful description: The following PSTEE triggers are not listed on IESDP yet:
  16. Previous versions are still available at the download page of the mod. Look for "Previous Versions" section at the right side of the page. You should find both SCS and SCS2 downloads there.
  17. that depends if Class(Myself,MAGE) trigger also detects multiclass character - needs to be tested. We can add !Class(Myself,MAGE_THIEF) trigger if needed. Dualclass with active thief class has the same problem of getting too much XP as with inactive thief class. You can probably use OriginalClass(Myself,THIEF) to better distinguish between dual- and multi-class. IF Global("BD_JOINXP","LOCALS",1) Global("K#OriginalClass","LOCALS",0) Class(Myself,MAGE_ALL) OriginalClass(Myself,THIEF) ClassLevel(Myself,ROGUE,2) THEN RESPONSE #100 SetGlobal("K#OriginalClass","LOCALS",2) END It should catch all valid dualclass states and skip multiclass variants at the same time.
  18. Well, there is an attempt for PST:EE to keep all seven companions around, over at Beamdog Forums.
  19. nice find, fixed locally. splprot.2da is now read during installation and remapped if needed (not in this case since both missing rows will get the same row number as in BG:EE)What I'm not sure about is this part of IESDP documentation: What projectile's ids field? 0x3e and 0x42? NI shows normal IDS files there, not SPLPROT.2DA references. IESDP doesn't have any info about it either (from what I see the documentation is outdated since it doesn't list anything after 0x2a offset). Yeah, IESDP's PRO format description doesn't include features added by EE patch 2.0 yet. Projectiles will use offsets 0x3e and 0x42 for splprot.2da entries when extended flags bit 30 (IWD-style check) is set. here is vanilla game code that handles Imoen's XP at the start of SoA (EET just resets BD_JOINXP variable since it's also set in BG1): Not sure how to handle it if XP trigger can't read original class experience. Any ideas? edit: maybe CheckStat / CheckStatGT / CheckStatLT triggers will take original class XP into account. Will test it soon (sooner if you can upload your save from the end of SoD ) Like I mentioned, it's not a big issue. Especially since it's apparently vanilla game behavior. I couldn't find an easy way to check for inactive class levels either. Edit: My SoD end save: 000000058-SoD finished.zip
  20. Could be an outdated graphics driver. The Lighting Pack makes changes to shader files which probably require OpenGL 2.0 or higher to work correctly. The DirectX backend requires DirectX 9.
  21. BGEE and BG2EE don't provide any options to adjust brightness or contrast on their own (yet). You can install the Lighting Pack to remedy this issue though. Alternatively, the games allow you to choose between two different graphics backends. The default is OpenGL, but you can also select DirectX on Windows, which might work better on some machines.
  22. Breakable non-enchanted weapons don't stop breaking after BG1 reaching chapter 6. This is caused by missing chapter check entries in SPLPROT.2DA that are available in BGEE/SoD, but not in EET.
  23. I've got another issue, concerning Imoen. At the start of SoA, when Imoen joins you, her experience is set to 500k. This may be too high if you dual-classed her in BG1, since it doesn't appear to take XP of the original class into account. In my case I dual-classed her right before the final Sarevok encounter, so she was around level 3 (second class) at the end. In SoA she got the full 500k XP for the second class in addition to 220k from her original class, which amounts to 720k XP and is only a single level away from reactivating her original class. It's not a big deal since she'll leave again after the initial dungeon, but it would be great if it could be fixed anyway.
  24. Strref 0 ("<NO TEXT>") will be resolved as an empty string that isn't displayed when used as creature name. Behavior of BG1EE and BG2EE are identical in this regard. Setting name to strref 0 solves the issue in EET. Edit: The random name issue when using strref -1 is most likely a game bug and has to be fixed by Beamdog.
×
×
  • Create New...