Jump to content

Allbrother

Members
  • Posts

    52
  • Joined

Everything posted by Allbrother

  1. I tried it both ways, it didn't change the effect - it stopped anything within the header ability from firing more than once, but the global effect still stacked per the combat log.
  2. As the last effect in the ability header or as the last global effect?
  3. I have this as the first effect within the spell's ability. Stops the other effects from stacking, but doesn't affect the global effect. I also tried to have it fire off via another on kill global effect, but that didn't do anything. Putting it as a global effect by itself didn't do much better - it removed the duration effects in the spell's ability, but still fired off multiple times. Edit: Also worth noting this is 2.5
  4. Sorry about the title, kinda hard to summarize. Okay here's the deal: I'm trying to make an ability that resets itself upon the caster scoring a kill while it's active. To that end, I added a global effect with opcode #232 (pictured) to recast the ability on actor death. This is when I ran into the first problem. It would fire off okay on the first kill, but then on the second kill it would fire off twice. Next kill, it would fire off 4 times. And it would keep doubling up until eventually lagging up and potentially crashing the game. I tried a bunch of stuff that didn't work until it occured to me to try the special field. I put a 1 in there and that did limit it to a single activation, however now it prints out an annoying "contingency spell activation" message every time. It's an improvement, but I'd still like to get rid of it. I tried numbers 1 through 10 and all odd numbers seem to do the same, while some of the even numbers result in a couple of resets working as intended before starting to stack up again. So, anyone know if any and what number in there would do the job without spamming the log? Or of another way to achieve this effect? Edit: Also worth noting this is 2.5 edit 2: solution here:
  5. Cool, I thought so but figured I'd ask in case there some weird interaction. Now question is if it's worth adding extra script blocks to reset it. What's the implication of leaving it screwed up on temporary friendly summons? Do enemies use any abilities that depend on the targets general value? I was wrong, it still working was a result of an interaction with another component. Both spell casts are required for this to work on its own.
  6. Yeah, first thing I did. I could replicate it, but I couldn't get it to work for summons. Turns out I was pretty close, but was missing a key piece. You beautiful, beautiful man, I could kiss you! I was so close too, but I had ChangeEnemyAlly(Myself,Familiar) before AddFamiliar() and didn't have the apply spells What's the purpose of the first instance of this? I removed it and it still works (edit: due to mod interaction, cast is needed for it to work on its own). Would it missing cause any not immediately obvious problems? Doesn't Shouldn't the ChangeEnemyAlly(Myself,Familiar) already force the update? I removed this as well and it still works (edit: due to mod interaction, cast is needed for it to work on its own). Again, would there be any issues that are not immediately obvious? Which shouldn't matter since they're temporary summons, right? Nevertheless, for the sake of thoroughness, how exactly? Is it known what it sets it too? And does that mean ChangeGeneral can't be used? Like so: IF Global("B3Once","LOCALS",1) THEN RESPONSE #100 ChangeGeneral(Myself,*general*) Continue() END Would that fix it? Or does 'unrecovarable' means it somehow blocks the ChangeGeneral action. If that works, we could set a variable for each general type (there's like what, 5?) prior to turning them into familiars then run this for each, right?
  7. It does, thanks. I also found out afterwards that the vanilla game uses them for spawning flaming fist on low rep characters. I tried changing their gender from summoned to "niether" to match the actual familiars in case for some weird reason that was affecting it, but nothing. Besides that, what would that look like? I looked at the flags and they only have "identified (0)", which shouldn't cause issues. This prompted me to do the same test as I did with biff, but this time with one of the summonable minions (specifically the totemic druid's spirit snake). It didn't work off the bat so I started changing one setting at a time to match biff and it was Allegiance. Switching it from Controlled to Neutral allowed the spawned (via CreateCreature in the area.bcs) creature to become a familiar and follow me through the areas. Okay, weird but I figure I'll just adjust my script to first change the allegiance of summoned critters to neutral and then to familiar. That should work, right? Wrong. I summon it, it goes blue then back to green, the test variable confirms blocks executed but the bloody thing will not go through the door. wtf So I change a summoning spell (call woodland beings) to instead summon the snek i just tested and confirmed can be changed to familiar. I load up the game, cast the spell, snek appears, goes blue, goes green, will not go through the door. wtf x2 Apparently the act of summoning a critter somehow prevents it from becoming a familiar, but doesn't prevent it from having its allegiance changed to neutral. Which just blows my mind
  8. TLDR: I tried to make it so temporary summons follow the player between areas, I failed, send help So I was pretty much never into summoning and pets and stuff, but then I recently made a little thing to make the summons clear fog of war and while I was testing it I caught myself thinking "Why do I have to rest/wait out the duration/kill my summons when changing area if I want to summon again? Are they too dumb to work the stairs?". So I figure why don't I just go and fix that? Turns out, not so easy. I've been trying and failing miserably for long enough and finally decided I'm tapping out and asking for help. I figured the obvious way do it would be to plagiarize someone who's done something similar. So I looked up other people's work and as best as I could tell all I needed to do was pop this: MakeGlobal() ChangeEnemyAlly(Myself,FAMILIAR) AddFamiliar() into the creature script and call it a day. Seems simple enough. Except it didn't work... huh? I fussed over that for a while, putting into existing blocks, splitting it off into its own, adding and checking for locals, adding a global to check ingame to make sure it executes etc... It evaluates true, it executes and it does fuck all. I assumed I must've missed some trick other people were doing so I figured I'd test this starting from scratch. I created a new script that consisted only of the above block executed upon seeing player1, I duplicated Biff the Understudy, i assigned him the new script and I had him spawn in Winthrop's tavern. Load up the game, go inside the tavern, Biff's there, he sees me, goes green and can follow me outside. Works like a charm. I replace a summoned creature's script with this new script, load the game, summon it go inside and... nothing happens. fml At this point i'm tired of this shit and I figure that if the mountain will not come to muhammad, then i'll move it for him. So instead of the familiar thing I'd do this: IF !InMyArea(Player1) THEN RESPONSE #100 MakeGlobal() MoveGlobalObject(Myself,Player1) END And I did it. And it didn't work. Or to be more precise, it sort of worked in the glitchiest way possible. The minion would not follow into the new area until I sent a party member back out to its area to see it poof out. And then when it did transport to player1, it would go uncontrolable and clicking on it would talk to it, but it'd retain the green circle. And that's when I gave up. So... help? Any ideas how to do this? also, on a completely unrelated note, anyone know if a)proximity triggers are used for anything besides traps and 2)if any traps have flags besides "trap detectable"
  9. Oh, I didn't know that. Thanks for explaining. So then if the first block sets a global and the second block checks for it, the condition wouldn't return true until the next scripting round, correct? Would that work for you? I.E.: IF OnCreation() THEN RESPONSE #100 SetGlobalTimer("MY_TIMER","GLOBAL",FIVE_ROUNDS) SetGlobal("MY_GLOBAL","GLOBAL",1) // more actions... Continue() END IF Global("MY_GLOBAL","GLOBAL",1) !ActuallyInCombat() !GlobalTimerNotExpired("MY_TIMER","GLOBAL") THEN RESPONSE #100 SetGlobalTimer("MY_TIMER","GLOBAL",FIVE_ROUNDS) // more actions... Continue() END
  10. But doesn't the timer already take care of that? Game loads, first block is executed, second block is executed for the first time 5 rounds later, is that not the intended behaviour? On the why I only had that guess, probably wrong
  11. This might be a silly question, but what's the purpose of the !OnCreation() trigger? As for why it's breaking it, this is just a guess but could that condition not be read as "if this block hasn't been processed before, don't process it" meaning it always gets skipped?
  12. I've gone this route before, turn back now. Unless you want to bang your head against a BG2/TOB/HoW character creator shaped wall, as those skip HLA screen entirely and any picks at earlier levels are lost. edit: You can kind of achieve a similar effect with a combination of opcodes #171 and #214
  13. Is there a good way to edit existing dialogs via weidu beyond extending bottom while remaining compatible? Like adding alternatives of the same response with different triggers and actions. For example if I want to make it so that telling the mage in front of FAI that he's got the wrong guy works as it does normally when the PC has 15 or less CHA, but he buys it and buggers off peacefully if PC has 16+ CHA, how would I do that with weidu?
  14. Yep, that was the first thing I tried while fiddling. But that trigger seems to be all kinds of busted, because the second thing I tried was a separate block that sets a new global to 1 on casting a specific spell and inserting a check for it in the above block, only to find out that every spell set that global to 1 for some reason. Then the third thing I tried was adding an effect to the spell itself to set that global to 1 and then back to 0 two rounds later, but that just resulted in the mf teleporting in 12 seconds late... At which point I said f that and promptly gave up.
  15. Did you work it out? There's a script in the city areas .bcs' that triggers the enforcers and I tried fiddling with it, but couldn't get it to leave 1 spell alone. Would be curious see how if you solved your issue IF SpellCast([PC],0) !GlobalTimerNotExpired("SpellsBad","GLOBAL") Global("BribedCowled","GLOBAL",0) GlobalLT("CowledWarning","GLOBAL",7) THEN RESPONSE #100 CreateCreatureObjectDoor("COWENF2",LastTrigger,0,0,0) // Cowled Enforcer SetGlobalTimer("SpellsBad","GLOBAL",ONE_HOUR) END The enforcer's dialogue increments the CowledWarning global and spawns Zallanora when it reaches 6 and the trigger above stops it afterwards
  16. Thanks guys. TBF telling me FOR could do it was helpful, I had picked it up (though only half understood it) from a tutorial a while ago and was using it to find the row to patch in the same tp2, but for some inexplicable reason had decided it couldn't do what I needed it to with the cols . Took some figuring out how to write it and the exact code would've saved some time (thanks subtledoctor) but got it working eventually
  17. Hi. I need to patch every column in a 2da after column x, but I don't know how many columns there are so I can't just do it one at a time. So I need to go from COUNT_2DA_COLS cols SET_2DA_ENTRY 29 4 cols 0 To COUNT_2DA_COLS cols SET_2DA_ENTRY 29 4->cols cols 0 How would I do that?
  18. Two reasons 1.Same reason the second option in the OP wasn't desirable - firing the script from dplayer relies on the player doing (or in this case not doing) something for it to work. And 2.I didn't think of it Another option I didn't think of that may work (though I've never tried it) could be to fire the script from the party join dialogue of each npc. Doesn't matter now though GL, hope it works, sounds like it should
  19. But that single core nowadays has 3-4-5 times the frequency and who knows how many times the instructions per cycle than the glorified calculators we used to play this game on. Couldn't find anything, everything is people asking where to find one in bgee. I assume there used to be a problem lugging around too much stuff in it? Even though I hoarded everything in it back in the day and don't remember having issues. I'm sure it helped people 10 years ago, but very little holds up today. And making a typo in the resource field will crash the game, but that's not a reason to not make spells and items. NE allows us to easily compile and check for faulty lines, there's no reason for there to be any once a mod is packaged and released. And if despite everything one is still unconvinced, a script like that can always be put in dplayer2/3 instead, which can be turned off with party AI in case of issues. Then it'll even be a single block, since player1-6 can be replaced with myself
  20. Is this aversion something left over from the original engine 15-20 years ago when pentium 4 was the peak of computing power? I've not seen any evidence to suggest any issues on the EEs and modern machines. In fact, the only thing I found googling was someone in 2007 having stutters on a BWS setup and pasting a nearly 10k lines long baldur.bcs. I hardly think a few extra blocks appended to the 4 different baldur.bcs' (which combined are still like half the lines) the trilogy is broken into these days is comparable, even without accounting for the updated engine and the fact today's browsers pull more resources than BG. Anyway... Per https://gibberlings3.github.io/iesdp/files/ids/bgee/ea.htm goodcutoff is all green circles, including party members, summons, possibly charmed creatures and others that turn green without being controllable. PC is only party members
  21. Couldn't you do the innate ability and then have baldur.bsc ReallyForceSpell it on joining? That's not much different than 1), but I don't get what's wrong with that option in the first place
  22. Yeah, didn't mean it was ready for use, just wrote it down to explain the idea and check if it can be done this way without actually going through the trouble of testing it myself :D. Good to know that it's viable, thanks.
  23. Wouldn't something like this (with all categories) appended to baldur.bcs & baldur25.bcs work? IF HasItemCategory(Player1,MSTAR,TRUE) !HasItemSlot(Player1,SLOT_SHIELD) Proficiency(Player1,PROFICIENCYSINGLEWEAPON,2) THEN RESPONSE #100 ChangeStat(Player1,MENTALSPEED,2,ADD) END
  24. Figured it out thanks to Angel on the g3 discord. In case anyone needs it, putting the value inside quotes ("-2" instead of -2) solves the problem
×
×
  • Create New...