Jump to content


Photo

Known Issues v4.0 (post bug reports here)


  • Please log in to reply
287 replies to this topic

#201 Qwinn

Qwinn
  • Modder
  • 3092 posts

Posted 23 January 2010 - 08:31 AM

On the choking thing, bah, I just found why both variables are necessary. Tiresias, in the Tenement of Thugs. He is the one situation I see where you can choke somebody and NOT have it recover a partial memory. Because of that one instance, you can't use "Choke=0" elsewhere to determine if you've ever gotten that memory. Pain in the ass. This sorta explains the weird triggers in the Drunk Harlot situation too, since there it checks the possibility of Choke > 0 and Choke_Dustman = 0, but even then it doesn't really make sense the way it's set up... that possibility *should* also let you recover the memory, but for some reason it doesn't.

It's hard to figure out the intent here... the way it's currently set up, if Tiresias were the first person you ever choked, then the only person you could choke afterwards that would give you the memory and 250xp would be Awaiting Death. It's just weird. (And, without your fix to the Dustman female dialogue, you could get that partial memory again and again for each female dustman).

I'm thinking the proper way to do this is to base it on Awaiting Death's check... "Choke_Dustman" = "Has received the partial memory", and all the triggers associated with choking need to be based on that variable instead of on Choke.

(NOTE: Iannis State 45 response 0 needs to increment Choke as well)

Qwinn

Edited by Qwinn, 23 January 2010 - 08:37 AM.


#202 nevill

nevill
  • Member
  • 87 posts

Posted 23 January 2010 - 08:51 AM

Other than that, no save, and it bypasses magic resistance, so if she is hurt, it should always, always work.

I've guessed that bit about being hurt after ~5 reloads, but it doesn't always work! I've seen it fail when she had 45 out of 46 hitpoints. Perhaps if a healing effect is greater than her wound, there is no effect? Very, very strange.

The harlot is northwest of SC Bar, at (1947, 602). Blue clothes. It's a shame that I do the same sequence of actions when testing. If only I talked to her colleague at (1819, 576), I would immediately realise that there is another bug, and a big one. When I talked to the latter and Annah interfered, the harlot at (1947, 602), which was closer to Annah, became hostile, and not the one I was talking with. In fact, all harlots have the same dialogue, and when there is an interjection, there is no way to get back to the same critter that you started dialogue with (the dialogue will continue with the critter nearest to the person who said the last line). It is interesting to see if they share the same script, too, and what are the consequences of that.

Either way, I can't think of a reason why angering a single harlot could make all of the Hive hunt you to death. Are you sure you or scient haven't fixed shouts or something like that, so that their scripts started working in a manner we've never seem before?

Edited by nevill, 23 January 2010 - 08:53 AM.


#203 Qwinn

Qwinn
  • Modder
  • 3092 posts

Posted 23 January 2010 - 08:59 AM

UGH. No, Choke_Dustman really has to be about choking Dustmen. This is due to the Drunk Harlot dialogue, and hers is a special case where if you have choked Dustmen (and -just- Dustmen, it would seem, given the dialogue of state 24) before, you will get an additional partial memory for another 250 xp...

Of course, this is messed up already, since choking Iannis increments the Choke_Dustman variable too, so if you choked him but never a Dustman, you'd still get "She was far easier to kill than the Dustmen." when choking the harlot.

Gaaah. Maddening, it is.

I'll come up with something coherent, so I will. May require a new variable.

Qwinn

#204 Qwinn

Qwinn
  • Modder
  • 3092 posts

Posted 23 January 2010 - 09:01 AM

Either way, I can't think of a reason why angering a single harlot could make all of the Hive hunt you to death. Are you sure you or scient haven't fixed shouts or something like that, so that their scripts started working in a manner we've never seem before?


I'm sure we haven't changed it in that area, and I think you are wrong that it didn't happen that way before. Take a look in NI, for example, at 0400HARL.BCS. You should be able to see that this file hasn't been modified, as it isn't coming from the override directory.

IF
  AttackedBy([PC],DEFAULT)
THEN
  RESPONSE #100
    Enemy()
    Help()
    Attack(LastAttackerOf(Myself))
END

IF
  Help([0.0.HARLOTS])
THEN
  RESPONSE #100
    Enemy()
    Attack(LastAttackerOf(LastHelp))
END

That behavior is intentional. Beat up on one of the sisters, and the rest of the sisters will come down on you.

As for the dialogue transferring to other nearby sisters, ugh, yes, this is expected behavior when you've got multiple NPC's sharing a dialogue file near each other, and you're closer to a different one than the one you're talking to. I don't think it can really be helped.

Qwinn

Edited by Qwinn, 23 January 2010 - 09:11 AM.


#205 nevill

nevill
  • Member
  • 87 posts

Posted 23 January 2010 - 09:21 AM

Ok. But why Angry Hivers? Are they really that angry? :D

And I don't remember how exactly 'LastAttackerOf()' works. I made sure I haven't attacked any of them.

Does killing them have any effect on 'GOOD', 'LAW' and 'MURDER' globals?

#206 Qwinn

Qwinn
  • Modder
  • 3092 posts

Posted 23 January 2010 - 09:44 AM

Ok, devSin, here's all my fixes to the choking logic, if you care enough to take a look. It required a new variable, "Choke_Memory".

Choke_Dustman is now only set when choking Dustmen, and the entire reason for its existence is DHARLOTD state 23 reply 1.

If you could get a memory choking Tiresias, this really would've been a lot simpler. Then Choke_Memory wouldn't have been necessary, and all the triggers could just be Choke 0 or not 0.

REPLACE_TRIGGER_TEXT DAWAIT ~"Choke_Dustman"~ ~"Choke_Memory"~
ADD_TRANS_ACTION DAWAIT BEGIN 48 END BEGIN 0 END ~SetGlobal("Choke_Memory","GLOBAL",1)~
REPLACE_TRIGGER_TEXT DDUST ~"Choke"~ ~"Choke_Memory"~
ADD_TRANS_ACTION DDUST BEGIN 42 END BEGIN 0 END ~SetGlobal("Choke_Memory","GLOBAL",1)~
REPLACE_TRIGGER_TEXT DDUSTFEM ~"Choke"~ ~"Choke_Memory"~
ADD_TRANS_ACTION DDUSTFEM BEGIN 42 END BEGIN 0 END ~IncrementGlobal("Choke","GLOBAL",1)SetGlobal("Choke_Memory","GLOBAL",1)~
REPLACE_TRIGGER_TEXT DDUSTGU ~"Choke"~ ~"Choke_Memory"~
REPLACE_TRANS_ACTION DDUSTGU BEGIN 18 END BEGIN 0 END ~GiveExperience (Protagonist, 250)~ ~~
ADD_TRANS_ACTION DDUSTGU BEGIN 8 END BEGIN 0 END ~SetGlobal("Choke_Memory","GLOBAL",1)~
REPLACE_TRIGGER_TEXT DHARLOTD ~"Choke"~ ~"Choke_Memory"~
ADD_TRANS_ACTION DHARLOTD BEGIN 23 END BEGIN 0 END ~SetGlobal("Choke_Memory","GLOBAL",1)~
REPLACE_TRIGGER_TEXT DIANNIS ~"Choke"~ ~"Choke_Memory"~
REPLACE_TRANS_ACTION DIANNIS BEGIN 45 END BEGIN 0 END ~"Choke_Dustman"~ ~"Choke"~
REPLACE_TRANS_TRIGGER DINCAR2 BEGIN 7 END BEGIN END ~"Choke"~ ~"Choke_Memory"~
REPLACE_TRANS_TRIGGER DINCAR2 BEGIN 9 END BEGIN 3 END ~"Choke"~ ~"Choke_Memory"~

Qwinn

Edited by Qwinn, 23 January 2010 - 09:52 AM.


#207 Qwinn

Qwinn
  • Modder
  • 3092 posts

Posted 23 January 2010 - 09:49 AM

This is also in that script (and above it):

IF
  See(NearestEnemyOf(Myself))
THEN
  RESPONSE #100
    Help()
    Attack(NearestEnemyOf(Myself))
END

That's why it's not necessary for you to attack them.

I'm actually thinking that, yeah, I should get rid of the "Enemy()" when the harlot runs from Annah. The dialogue action itself tells her to run away, but then the scripting overrides and makes her attack you. I suspect the reason she was turned Enemy() was just so you couldn't talk to her again and have a normal conversation after what just happened, but that isn't meshing well with the scripting. I think the just running away makes more sense (and in fact, should probably have her escape the area in order to avoid the issue, problem is you can't make them -run- out of the area, but I think walking out of the area is the lesser of all evils).

Qwinn

Edited by Qwinn, 23 January 2010 - 09:53 AM.


#208 -cebru-

-cebru-
  • Guest

Posted 23 January 2010 - 09:50 AM

Looked through the unused sounds list. Tried really hard to come up with some banters, but there just doesn't seem to be a whole lot there left. Are there by chance any unused dialog in the game files that could be used for this? Not all of it needs to be voiced.

Anyway, what I do think needs to be restored from that list:

Fjhull:
FFT056: "Feh! You'll regret attacking me." -> Play when Fjhull gets attacked by the player
FFT065: "Feh! Thrice damned be you, mortal." -> Play when Fjhull is at low health (40%?)
FFT009: "Finally... at peace." -> As you suggested yourself, should be his dying sound

Trias:
TTB020: "In time, my cause shall be honored." -> Unused. STRREF 58966 refers to it as "Trias Dying" - Or does he already have a sound file play on death?

I see no other real use for these lines, might as well put them back in like this.

#209 -cebru-

-cebru-
  • Guest

Posted 23 January 2010 - 09:54 AM

Also, any chance of morale getting somehow incorporated into the game? Lots of nice lines that go with it. Same with all the spell related sounds (warped spells, spell learned, etc).

#210 nevill

nevill
  • Member
  • 87 posts

Posted 23 January 2010 - 09:56 AM

problem is you can't make them -run- out of the area

Just tested. 'RunAwayFrom(Whomever, for a *short* amount of time) EscapeArea()' should work fine.

#211 scient

scient
  • Modder
  • 1010 posts

Posted 23 January 2010 - 10:07 AM

Also, any chance of morale getting somehow incorporated into the game? Lots of nice lines that go with it. Same with all the spell related sounds (warped spells, spell learned, etc).


Morale has been fixed since v3. What lines are you referring to? Also spell warping works, only in particular areas and only certain spells that can differ from areas. For example, try casting any of the strength spells in any of these areas and you'll end up with str bonus actually acting as decrement.

AR0900, AR0901, AR0902, AR0904, AR3015, and AR3016

As for spell learned, I don't think that's used and was something Qwinn and I talked about adding in.

Those interested in the classic TBS game Sid Meier's Alpha Centauri / Alien Crossover should check out the unofficial patch I work on here.


#212 -cebru-

-cebru-
  • Guest

Posted 23 January 2010 - 10:10 AM

Oh, I see. I guess the stickied list isn't quite up to date then :)

#213 scient

scient
  • Modder
  • 1010 posts

Posted 23 January 2010 - 10:19 AM

Oh, I see. I guess the stickied list isn't quite up to date then :)


Ah, now I see what you mean. No, the sticky list is up to date afaik I just misunderstood what you were asking. For next release I'll definitely see about adding in some of those unused sets. It will require either adding them into engine or looking into some of CRE sound fields that NI has listed as unknown and such.

Also, I thought it would be nice to see about adding in some of the ones fron BG1/BG2 for things like chests/doors and other environmental sounds.

Edited by scient, 23 January 2010 - 10:21 AM.

Those interested in the classic TBS game Sid Meier's Alpha Centauri / Alien Crossover should check out the unofficial patch I work on here.


#214 scient

scient
  • Modder
  • 1010 posts

Posted 23 January 2010 - 10:31 AM

@devSin: I tracked down code location for RandomWalk which shares root function with RandomTurn and RandomRun (RandomFly uses its own). All four of these "Random" actions are found in the same switch. I wasn't sure how much you've worked with internals of engine but if you'd like code locations I can post em. Just working on doing some analysis to track down odd behavior of RandomWalk. Something easy in comparison to headache that is trying to resolve quick load crash. Anyway, in one of your posts you said something about "Wander distance" value. Where would I find this in NI? I looked at PST/BG2 and couldn't find it under CRE values.

edit:
Also, I might be able to improve the "randomness" of rolls by using existing srand() function along with GetTicketCount for internal random roll function. At the moment it's just using rand().

This:
srand(GetTickCount());
int x = rand()%100;

Vs.

int x = rand()%100;

By setting a seed, it should improve the pseudo rng a bit. Code is already in there, it looks like they inlined srand/rand but srand is only used in two locations and not in the main function which handles 95% of all random rolls. I guess a low values it isn't that important but it can't hurt.

Edited by scient, 23 January 2010 - 10:40 AM.

Those interested in the classic TBS game Sid Meier's Alpha Centauri / Alien Crossover should check out the unofficial patch I work on here.


#215 Qwinn

Qwinn
  • Modder
  • 3092 posts

Posted 23 January 2010 - 10:35 AM

I revised the sticky list, changed future tense "Will be fixed in v4.0" to *was* fixed, and unbolded them (bold red = "in upcoming release"). Also, Grace now has a line that she speaks when first entering the Festhall in v4.0, I'd never documented that one in the sticky list before.

Qwinn

Edited by Qwinn, 23 January 2010 - 10:36 AM.


#216 scient

scient
  • Modder
  • 1010 posts

Posted 23 January 2010 - 10:49 AM

This is how the existing function works for those interested.

int IE_random_roll(int nMax, int nMin)
{
  if(nMax <= 1) nMax = 1;
  int nRoll = nMin + ((rand() / 100) % nMax);
  if(nRoll >= nMax) nRoll = nMax - 1;
  if(nRoll < 0) nRoll = 0;
  return nRoll;
}

Those interested in the classic TBS game Sid Meier's Alpha Centauri / Alien Crossover should check out the unofficial patch I work on here.


#217 Qwinn

Qwinn
  • Modder
  • 3092 posts

Posted 23 January 2010 - 11:13 AM

Just tested. 'RunAwayFrom(Whomever, for a *short* amount of time) EscapeArea()' should work fine.


Afraid it doesn't. Trust me, I've tested it MANY times, and just did so again.

If you do them in the order you suggest, she will run away, but then she won't necessarily actually leave the area, and if you click on her for dialogue you'll stop her in her tracks.

If you do them in the opposite order, she'll just walk away, unclickable, and will escape the area.

Qwinn

#218 -Prince-

-Prince-
  • Guest

Posted 23 January 2010 - 11:41 AM

I noticed that after you speak to O and make him disappear from the Smoldering Corpse Bar, and after you have recruited Dak'kon, you can talk to Ebb Creakkness and ask him about the patrons in the tavern. He speaks as if O is still in the bar, and also refers to the githzerai sitting at the table.

I didn't try it, but if you make O disappear, but not yet recruit Dak'kon, the dialogue might still need changing to reflect that O is not there but Dak'kon still is.

#219 Qwinn

Qwinn
  • Modder
  • 3092 posts

Posted 23 January 2010 - 12:06 PM

I noticed that after you speak to O and make him disappear from the Smoldering Corpse Bar, and after you have recruited Dak'kon, you can talk to Ebb Creakkness and ask him about the patrons in the tavern. He speaks as if O is still in the bar, and also refers to the githzerai sitting at the table.

I didn't try it, but if you make O disappear, but not yet recruit Dak'kon, the dialogue might still need changing to reflect that O is not there but Dak'kon still is.


Yah, I noticed that too, unfortunately there isn't any dialogue in the original files to deal with their absence.

Qwinn

#220 -Guest-

-Guest-
  • Guest

Posted 23 January 2010 - 12:15 PM

I noticed that after you speak to O and make him disappear from the Smoldering Corpse Bar, and after you have recruited Dak'kon, you can talk to Ebb Creakkness and ask him about the patrons in the tavern. He speaks as if O is still in the bar, and also refers to the githzerai sitting at the table.

I didn't try it, but if you make O disappear, but not yet recruit Dak'kon, the dialogue might still need changing to reflect that O is not there but Dak'kon still is.


Yah, I noticed that too, unfortunately there isn't any dialogue in the original files to deal with their absence.

Qwinn


Is that a problem? You could edit the text slightly about Dak'kon, or remove the references to O completely. Or simply remove references to both completely.