Jump to content


Photo

Please report crashes here


  • Please log in to reply
257 replies to this topic

#81 JustMe

JustMe
  • Member
  • 47 posts

Posted 14 December 2009 - 11:46 AM

Tried every trick in the book to get into the curiosity shoppe. (I have a heavily modded Direct Play version) So I'm going to just download the 2 CD version hopping that my saves will work (touch wood).

I also tried modding the save game with Near Infinity to just put the story sensitive items in the curiosity shoppe in my inventory but I couldn't work out if that was even possible. I've tried tormentHack and a number of other torment editors but none allows me to add items to the inventory that aren't already there.

If anyone know any way to mod the inventory with the items needed it would be greatly appreciated.

EDIT: Nevermind, hex editing and some trial-and-error worked it out.

Edited by JustMe, 14 December 2009 - 02:52 PM.


#82 -Guest-

-Guest-
  • Guest

Posted 20 December 2009 - 10:56 AM

I encounted a strange bug whilst playing the game, though I'm not sure if it relates to the patch.

I went to the lower ward, and as the Wererats took Morte away, I remembered I forgot to get mazed by joining that silly cult of that portal god, so I went back as soon as I lost Morte. As soon as I got mazed, Morte was on my team, but I could not choose him. He was leveling up, I could give him items fer him to hold/equip, but he isn't on screen, nor you can click on him. Hovering the pointer over his mug on the bottom makes his name and HP pop up on the screen as if he's standing behind my party, but he is not clickable. I did the Master of Skulls quest, and I 'got' him back, but he's still invisible. Any help here?

#83 Qwinn

Qwinn
  • Modder
  • 3092 posts

Posted 25 December 2009 - 01:37 PM

As soon as I got mazed, Morte was on my team


This implies he was with you -in the maze-. That seems unlikely. Do you mean he joined you when you left the maze?

Qwinn

#84 -Guest-

-Guest-
  • Guest

Posted 27 December 2009 - 12:08 AM

As soon as I got mazed, Morte was on my team


This implies he was with you -in the maze-. That seems unlikely. Do you mean he joined you when you left the maze?

Qwinn

Yes, that's what I meant :P Silly me. Yeah, left the maze, he was on my party but invisible.

Also, another problem I found was that the game crashed when I tried to enter the Mortuary. I JUST got Nordom, and used the teleporting ruby to go to the Mortuary. I talked to the Dustamn guard to let me in, and the game crashed halfway into loading the area.

#85 Qwinn

Qwinn
  • Modder
  • 3092 posts

Posted 27 December 2009 - 02:31 AM

Okay, cool. Now to diagnose the maze problem, you need to tell me in what area you got mazed and were then returned to after you got out.

The Mortuary crashing bug is as old as the hills, also happens in the vanilla game, and I still haven't found out what's causing it. The work around is to get Pox in front of the Mortuary to "make you a deader" to get in.

Qwinn

#86 -Guest-

-Guest-
  • Guest

Posted 02 January 2010 - 10:49 PM

Okay, cool. Now to diagnose the maze problem, you need to tell me in what area you got mazed and were then returned to after you got out.

The Mortuary crashing bug is as old as the hills, also happens in the vanilla game, and I still haven't found out what's causing it. The work around is to get Pox in front of the Mortuary to "make you a deader" to get in.

Qwinn

I got mazed in the alley with the Razor Angels and the other gang, forgot the name. I joined the religion that worships the Gate deity, and walked out of the alley through the right, towards the mortuary.

Sorry for the late reply.

#87 Qwinn

Qwinn
  • Modder
  • 3092 posts

Posted 02 January 2010 - 10:59 PM

That's really bizarre, since he's not even in the area... when Morte gets kidnapped, he's actually moved to an inaccessible, unseeable area of the Lower Ward map, and when you exit Lothar's area after freeing him he's teleported back to you.

I actually thought the join scripts only worked if the PC was in the area when it executed. Guess not. Bleah. That actually explains a couple things. Looks like I'm going to have to create a number of variables to track who is in your party when you get separated, and only join those. Of course, it's done in a cutscene and you can't do conditions in those. Grrr. This is gonna be a pain, but yeah, needs to be done.

Qwinn

#88 Qwinn

Qwinn
  • Modder
  • 3092 posts

Posted 03 January 2010 - 12:23 AM

Okay, wait, I'm really confused now. I can't see how this happened. You're saying Morte got attached to your party in the Hive Mortuary area? I can sorta see it if you went to the Lower Ward and he got attached -there-, but not seeing how it can happen in the Hive Mortuary area. Ugh.

I may wind up having to disable the Party Separation fixes (that automatically reassemble your party after the few times you are separated from them via the plot, like being mazed) that have been in since v1.0, cause I'm not seeing any way to fix this. Most of the party separation stuff is apparently handled by the engine.

Qwinn

#89 scient

scient
  • Modder
  • 1010 posts

Posted 03 January 2010 - 06:05 AM

Well, took 5 mins and got code locations where PC's are converted to NPC's (EA.IDS -> 2 (PC) vs 128 (NPC)) when entering AR1800 and then NPC's -> PC's when exiting back to AR1700. If you give me saved game or details of buggy behavior I'll look into it more. Not quite sure issue.

Edited by scient, 03 January 2010 - 06:10 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.


#90 Qwinn

Qwinn
  • Modder
  • 3092 posts

Posted 03 January 2010 - 06:19 AM

Wow, cool, scient. Well, I could potentially do something if I could get variables set when an NPC gets booted from the group. That way, I could have my rejoin logic only kick in if the character were absolutely, positively in the party at the point of separation. Up until now (and this was all based on SKARDAVNELNATE's fix, which worked well enough, I thought), the fix just attempts to rejoin everybody on the assumption that they are in the area you're returning to where the separation happened. The only exception necessary was to make sure that pre-Pharod Hive Mortuary Annah didn't get added into the party if you left the maze via the Hive Mortuary area. And again, I thought it was mostly working fine.

I did experience a bit of weirdness myself one time though. The Clerk's Ward is one place where it was possible to return from the maze, so I did have the rejoin code there. I parked Vhailor in the Clerk's Ward one time, and when I would zone into that area from the Lower Ward, it would sometimes automatically try to rejoin him. I couldn't find any way my code was responsible though... it can only kick in if the player arrived at the Clerk's Ward from AR1900, the maze. So I didn't know what to do about it.

Part of the problem for me is that I'm not sure what happens in the vanilla game anymore... when you return from the maze or whatever, are the PC's just standing around? Or does the vanilla game try to do something to make them rejoin, via the engine, just not as robust as what SKARDAVNELNATE had it try to do?

Well, I'm gonna comment out the whole thing and test it myself, see if I can get a handle on how it operated, and then see if I can figure out what could cause this fluky behavior that's been rarely reported.

I'm also going to look and see, if you did give me the set variables (they'd be called Rejoin_Morte, Rejoin_Annah, Rejoin_Dakkon, Rejoin_Grace, Rejoin_Vhailor, Rejoin_Ignus and Rejoin_Nordom), I could actually do anything useful with them. I'm not positive yet that I could, so don't go nuts trying to get them in yet. Would it create space issues in the engine to set all those variables at party separations?

Qwinn

#91 Qwinn

Qwinn
  • Modder
  • 3092 posts

Posted 03 January 2010 - 06:23 AM

Oh, and note that the other places where I'd need this logic would be when getting mazed (can happen in AR0100, AR0101, AR0200, AR0300, AR0301, AR0400, AR0500 and AR0600... can probably find it by looking for references to when the movie MAZE1 plays), and when entering the dreambuilder (entering AR3017 from AR0502).

Again, don't do anything yet, just telling you so you can tell me whether there's enough room in the engine to do what I'm suggesting.

Qwinn

#92 scient

scient
  • Modder
  • 1010 posts

Posted 03 January 2010 - 07:11 AM

Setting up globals inside engine takes a bit of space although I could always optimize it into loop if parameters were same. This seems like overtly complicated method tho.

The two code locations engine uses to toggle PC/NPC for non-TNO members is same used when adding party member via dialog or booting them via reform party. They're probably action script functions, I'd have to do some testing to be sure. If you get more details on bug or how to recreate it I can do some tracing prior to these script functions being called internally for party manipulation for tomb/maze where TNO is alone.

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


#93 scient

scient
  • Modder
  • 1010 posts

Posted 03 January 2010 - 07:16 AM

On another note, if someone has saved game or steps to cause Mortuary crash I'd be interested to look at seeing if I can solve it. Debugging and locating cause of crash is very simple (fixing the code on the other hand...).

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


#94 Qwinn

Qwinn
  • Modder
  • 3092 posts

Posted 03 January 2010 - 07:38 AM

Well, the only other option that I can see is for you to disable all of the party separation code in the engine and I'd handle it completely within scripting (I already do it manually when entering the dreambuilder in the XP Deionarra mod). That's a reasonable possibility. But as long as the engine is doing the separation in its current form, I'm not sure I see any others.

Urf, wait, come to think of it, I'm not sure that'd work... I'd have to basically interrupt the engine as it teleports you to the maze. Totally depends on if the area script runs before the "oops, you've been mazed" engine code runs, and we're probably only going to determine that via testing.

Qwinn

Edited by Qwinn, 03 January 2010 - 07:40 AM.


#95 Qwinn

Qwinn
  • Modder
  • 3092 posts

Posted 09 January 2010 - 11:20 AM

Okay, I worked on this (the Morte invisible rejoin thing) a lot today. I am able to consistently duplicate the problem, sort of.

First, to whomever reported the problem, you can fix it by saving and reloading in the Lower Ward with Morte. In my game, that reactivates Morte. Now, that caused a banter to trigger with Annah, which may be what reactivated him. If he's not reactivating and a banter isn't triggering, try resting until a banter should trigger (I'm assuming you have my banter accelerator installed) and then saving and reloading in the Lower Ward.

Now, I've figured out what's doing it. If you activate the party separation code for some reason, it runs a script that attempts to make every possible PC join the party. The theory apparently was, if the NPC doesn't exist in the area where the script activates, the PC won't rejoin, and that is true. BUT, if you then make it to an area that does have an unjoined PC before quitting or reloading (that seems to clear the problem), the script will then kick in when you enter the area with the PC. So, example, you make it out of the maze, Annah and Dak'kon rejoin you... but a script saying to rejoin Morte also ran, it just didn't do anything yet because Morte wasn't in the area. But then when you get to the Lower Ward, assuming you don't save/reload in the interim, that script block that was still running in memory activates and causes Morte to rejoin you prematurely. That make sense?

Unfortunately, I'm not sure how to solve it. I still think the party separation/rejoining code solves more problems than it creates, and the problems it causes are more avoidable (just save and reload after your party rejoins you after a forced separation), so I'm leaning toward leaving the party separation fix in. And I'll see if I can brainstorm a way to do this that won't cause the problem.

Qwinn

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


#96 -Guest-

-Guest-
  • Guest

Posted 09 January 2010 - 12:04 PM

It sounds like the engine doesn't unload them when they get kicked out. :( He's probably already queued to join the party (the engine doesn't move him, so you don't actually see anything until you go to his area); hopefully, this just happens because he's still a global object (in the GAM) and not some freak behavior where scripts are running indefinitely.

I'm not sure what "problems" the rejoin scripts are supposed to be solving, though (was there something other than player convenience)? If it wasn't a cutscene, you could probably just append the area scripts and use CreatureInArea() checks to makes sure the characters being forced to rejoin are actually in the current area (hopefully that wouldn't pick up Morte or others); but I don't remember anymore the script you use in the current fixpack.

Note also, it looks like most characters who are stolen from the party are made invisible in a manner that isn't stored (so if you sell Dak'kon to Vrischika, you can just save and reload in her shop to have him reappear, and then you just have him rejoin; it's also funny with Morte and the pillar, although they do move him so he's obscured behind the pillar). For AR0609, I just stick
IF
  Global("SELL_MORTE","GLOBAL",2)
THEN
  RESPONSE #100
    Deactivate("MORTE")
    Continue()
END

IF
  Global("SELL_DAKKON","GLOBAL",2)
THEN
  RESPONSE #100
    Deactivate("DAKKON")
    Continue()
END

IF
  Global("SELL_NORDOM","GLOBAL",2)
THEN
  RESPONSE #100
    Deactivate("NORDOM")
    Continue()
END
and AR1001
IF
  Global("PILLAR","GLOBAL",3)
THEN
  RESPONSE #100
    Deactivate("MORTE")
    Continue()
END
You could add IsActive() checks (if it works in PST), but the hit is small enough that it really doesn't matter.

#97 Qwinn

Qwinn
  • Modder
  • 3092 posts

Posted 09 January 2010 - 12:24 PM

I'm not sure what "problems" the rejoin scripts are supposed to be solving, though (was there something other than player convenience)?


Apparently, yes. There were complaints by people that for some reason they couldn't get the PC back in their party after being forcibly separated. Although, now I'm wondering if this wasn't just due bad timing of the old "can't initiate dialogue with this particular PC" bug that is resolvable just by saving and reloading, or exiting the area and returning. If that's all it is, maybe I should can the whole thing as too problematic. Well, let's see if I can come up with something workable. I -can- already improve it so it won't create any catastrophic problems like force-joining PC's that you haven't done everything you should to get in your party yet (such as, walking into the Brothel and having Grace instantly join you before you ever talked to her or did her quest).

If it wasn't a cutscene, you could probably just append the area scripts and use CreatureInArea() checks to makes sure the characters being forced to rejoin are actually in the current area (hopefully that wouldn't pick up Morte or others); but I don't remember anymore the script you use in the current fixpack.


Yeah, I already made it not-a-cutscene, and I'm just having the area scripts check for various conditions on each individual PC. I -did- want to use CreatureInArea, but I don't see how I can use it - it only takes one parameter, the area, so how does it know which creature to check on? I didn't find that trigger used in any scripting, only in dialogues. I already tried Exists() hoping that would mean "Exists in the current area", but no, it apparently works if the PC exists anywhere. But yeah, if I had a trigger that can run in an area script that checks "This PC exists in this area", then I could make this pretty close to perfect.

Qwinn

#98 Qwinn

Qwinn
  • Modder
  • 3092 posts

Posted 09 January 2010 - 12:25 PM

I'll have to test on that Deactivate thing not getting stored, it does seem to be stored to me in at least some situations. For example, Morte getting kidnapped he stays in the Lower Ward and just gets deactivated, I don't think reloading in the Lower Ward brings him back.

Qwinn

#99 -Guest-

-Guest-
  • Guest

Posted 09 January 2010 - 12:47 PM

Yeah, I already made it not-a-cutscene, and I'm just having the area scripts check for various conditions on each individual PC. I -did- want to use CreatureInArea, but I don't see how I can use it - it only takes one parameter, the area, so how does it know which creature to check on?

Yep, you're right. At a guess, this returns true if the caller is in the listed area (the caller being the person running the script); you'd have to extend the characters' scripts to use it. :(

Exists(Protagonist) may work (because the engine still has to associate Protagonist with a real object, so it may not just jump directly to TNO) to have it only run when TNO jumps back, but I wouldn't keep my fingers crossed.

I didn't find that trigger used in any scripting, only in dialogues. I already tried Exists() hoping that would mean "Exists in the current area", but no, it apparently works if the PC exists anywhere. But yeah, if I had a trigger that can run in an area script that checks "This PC exists in this area", then I could make this pretty close to perfect.

Yeah, unless scient finds something in the script code, this pretty much confirms that global objects are still bouncing around and responding to actions (script queues aren't saved, so those pending actions get tossed when you reload).

I'll have to test on that Deactivate thing not getting stored, it does seem to be stored to me in at least some situations. For example, Morte getting kidnapped he stays in the Lower Ward and just gets deactivated, I don't think reloading in the Lower Ward brings him back.

That's because this is the same code they use in AR0500 to keep him from reappearing. :-)

I'm not sure why they just don't destroy the ones you sell (which would have been my first instinct); they didn't, so I figured I might as well run with what they started. You will want to test if it happens to you (I see it with 4CD on Vista), and you may want to reinforce the blocks with more conditions, like !InParty(), and double-check the variables (the ones I have should be fine for vanilla, but any change to Vrischika's or the Pillar's dialogues could potentially break them).

#100 -Guest-

-Guest-
  • Guest

Posted 09 January 2010 - 12:54 PM

Exists(Protagonist) may work (because the engine still has to associate Protagonist with a real object, so it may not just jump directly to TNO) to have it only run when TNO jumps back, but I wouldn't keep my fingers crossed.

That was supposed to be grouped with the "extend the characters'" scripts, sorry.

Although, now that I think about it, you may want to try Exists(PlayerN), where N is 2-6. It will probably behave the same as Exists("ScriptName"), but it's possible it will continue to associate with the party members (even after save and reload; IE is stupid about keeping these updated) and only work in the active area (probably not, but short of leaving it as-is or disabling it all...).