Jump to content

Ardanis

Modders
  • Posts

    2,789
  • Joined

  • Last visited

Everything posted by Ardanis

  1. They can't. Familiar-like characters can be scripted for, but anything that can be summoned in quantity is impossible to reach, scripting name or not.
  2. ...I think I was right then to build the neothelid encounter around its burrowing ability (not like I had much choice anyway) instead of detailed psionics implementation
  3. I seem to recall Chimeric was looking for the same thing not that long ago, and came up dry as well? Unfortunately, no, I don't think it exists.
  4. Target's pickpocket value, I think?
  5. There're some "bd_i_hate_journal" variables, so... IIRC it's Polymorph() then. I remember them two having reverse-intuitive names.
  6. You can patch the spl to restore dog animation on appropriate targets. Supposedly this should work, though I haven't tried it myself: COPY_EXISTING bdresurr.spl override LPF ADD_SPELL_EFFECT INT_VAR opcode=177 parameter1=105 parameter2=4 target=2 timing=1 STR_VAR resource=doganim END // the CREATE_EFFECT function can taken from IR https://github.com/Gibberlings3/ItemRevisions/blob/master/item_rev/lib/macros.tpa#L69 LAF CREATE_EFFECT INT_VAR opcode=53 parameter1=0x7400 parameter2=2 target=2 timing=1 STR_VAR effect=doganim ENDOther than that, you can inject ~IF Race(Player2,DOG) Global("fix_the_dogs","bd0120",0) THEN RESPONSE #100 SetGlobal("fix_the_dogs","bd0120",1) WhicheverActionActuallyChangesAnimation(Player2,DOG_WILD) Continue() END~ for players 2-6 after the first block in bd0120.bcs.
  7. IIRC it doesn't work in vanilla BG2 without ToBEx. Don't remember if EE added the feature back in.
  8. As long as you don't make huge scenes several hundreds lines long with lots of screen action, with multiple script files looping under varying conditions, it should be quite simple. Just copy the skippable block into the cleaner script, then delete all the waits, displays, visuals, replace MoveToPoint() with JumpToPoint() and you'll be already 80% done.
  9. So basically, you want to add a "canon" character, not just a regular joinable. Yes, that indeed is more problematic because of some "cinematic" scenes like in the ending. For the movement part itself, you can just EXTEND_TOP the bd6200.bcs with this IF Global("bd_plot","global",670) Global("ACBre_move_to_exit","bd6200",0) THEN RESPONSE #100 SetGlobal("ACBre_move_to_exit","bd6200",1) // StartCutsceneMode() // optional - there should be no delays to warrant it, but neither should it cause harm ActionOverride("ACBre",MoveToPoint([1410.1410])) Continue() END For the actual transition, yes, I don't see a way without hijacking the cutscene script directly, at least if you want to preserve the visual consistency when the party arrives into BD6100 area - the characters walking to the center of area before Imoen starts dialog. Although you can make your NPC to pop up after it ends by appending the top of bd6100.bcs. Like I said, SoD has quite a number of "cinematic" transitions between cutscene mode and normal gameplay, something that you'd find often in later games, e.g. Dragon Age, but not in the old BG. So if you want to incorporate your content into those, expect it to be less pleasant than traditional modding... At least you can simply inject you actions into pre-existing QA-tested scripts - I had to build them from the scratch while making compromises between storyboard, engine limitations and player's experience (and sometimes the area art as well, lol) Yep, that should work fine. In fact, a lot of vanilla IWD transitions had party members to transition themselves individually, instead of having Player1 do the work for them. However, during the EE development there were discovered problems with multiplayer where other party members would sometimes fail to transition on their own. So, unless you expect your mod to be used frequently in multiplayer, I don't think there should be any issues (and I'm not sure if it relates to any actor or just party members). At the very worst, he simply won't be present in bd6100. That's the skippable cutscene stuff. SetCutSceneBreakable() enables/disables the skippable mode, where pressing Esc will stop the cutscene in progress, dropping all the actions queued, and execute the cleanup script in area's override slot (if any exists). It's possible that aborting the scene in the middle may e.g. leave the party in an area resered for dream cutscenes, so there'd be no way out of there - this is what the cleanup script is for, to complete the critical actions like transitions between areas or spawning/de-spawning actors while skipping all the visual fluff. To keep this a manageable framework, we dedicated cutskip.bcs to do the cleaning work in SoD (cutskip2.bcs in BG2EE), and used BD_CUTSCENE_BREAKABLE global to Switch() between the responses in that script. This is all customizable, so for your mod cutscenes you can use your own cleanup file with or without the switch for ease of use, or even none at all if interrupting the scene in the middle won't break anything crucial. I don't think there'd be a need for apology even if I did get offended.
  10. While I readily accept all the scorn I had earned with my sloppy scripting, I do feel the need to point out that SoD wasn't very "BGish" in terms of player's freedom, it had one too many "cinematic"-like railroading moments that the engine was never designed for. That said, what do you mean about the lack of variable? You can just append the block to the area script, it should work the same.
  11. I think I also suggested this to Demi back then, but personally I see no reason why you can't just set minimal INT requirement for scrolls (9-18) and enable them to thieves without further restrictions. This even makes perfect sense because the maximum level of spells wizards can learn were exactly based on their INT, which was removed in BG2.
  12. Vanilla BG2 iirc used specifics for feuding Trademeet families. SoD makes more extensive use of it, using universal generic AI script for most non-party members and relying on specifics to control their allegiance (e.g. crusaders and coalition) and who should respond to shouts in the camp. So that if someone is going to side with party or with monsters, all you have to do is to ChangeSpecifics() and the AI script will take care of the rest. See BDSHOUT.BCS for reference. You probably won't break too much, or even anything at all, but you'll be following in Chimeric's footsteps basically. The field's purpose is really for InMyGroup() trigger.
  13. I could swear I'v seen cases when it wouldn't evaluate properly without percentages, sometimes double percentages.
  14. Projectile immunity is only good against ranged weapons, since there's no other way to specify them. If it's used by a spell, you're better off 206-ing it directly by resource name.
  15. From top to bottom, both inside and outside of OR(). The rumor about reversed checking order within OR() was wrong.
  16. Calling the trigger once and performing one bitwise operation vs doing both things multiple times.
  17. Also you don't really need to add it to ids, ~StateCheck(Player2,0xfc0)~ works just as fine. STATE_REALLY_DEAD is just a conveniently named label to group all possible death states.
  18. Also possible that all monsters suddenly got patched with melee damage bonus, like kensai... For whatever reason imaginable. As Jarno says, a save could be useful. Other than that, you can try to ctrl-q a monster into party and check his stats/bonuses/etc. in Shadowkeeper or some other editor.
  19. Melee attacks against targets without melee weapon equipped receive +4 thaco/damage bonus. If I were to hazard a guess, you're playing as monk and for some reason his fists don't function as melee weapons. Honestly, I don't remember if it was supposed to be like that in vanilla.
  20. Try wrapping it into ~SetInterrupt(FALSE) /* ... */ SetInterrupt(TRUE)~. I don't remember if it works on actors only or from area/global scripts as well, but uninterruptible actions prevent saving until they're complete.
  21. See my post edit, NCPLEVEL.2DA may be an automatic solution for your problem. May be, I don't know for a fact. PS SoD's versions of those tables are NPCLVLDS and BDDIALOG, vanilla are NPCLEVEL, NPCLVL25 and PDIALOG. Consider using only vanilla files to test the code
  22. BIO strref means nothing, really. Check if creature's script name exists in PDIALOG.2DA, iirc this is how they're normally detected as valid party members. What Kathos said about SoD also applies, there maybe special cases when a character is supposed to be high enough level for plot purpose, either as ally or as enemy. PS Have a look at NPCLEVEL.2DA, should be possible to replace all level 2+ CREs with level 1 version, so even if you face an NPC as a high level boss, when they JoinParty() they'll drop to level 1 (I think it works this way). EE v2.0 has actually done exactly that, basically killing the entire purpose of that table and replacing the level growth with scripted XP adjustment, so you may need to fix that if it blocks your design.
×
×
  • Create New...