Jump to content

Caillean

Members
  • Posts

    118
  • Joined

  • Last visited

Posts posted by Caillean

  1. Well, if I can help with testing something more, just tell me. As for the halting problem - you're losing me here :D Amazing that you can actually make something out of this stuff the debugger spits out.

  2. kk, new debugging run:

    Breakpoint 2, 0xb7e7cea0 in GemRB::MoveBetweenAreasCore(GemRB::Actor*, char const*, GemRB::Point const&, int, bool)@plt ()
       from /usr/local/lib/gemrb/libgemrb_core.so.0.8.4
    (gdb) n
    Single stepping until exit from function _ZN5GemRB20MoveBetweenAreasCoreEPNS_5ActorEPKcRKNS_5PointEib@plt,
    which has no line number information.
    
    Breakpoint 2, GemRB::MoveBetweenAreasCore (actor=0xa69a1d8, 
        area=0x86f32f0 "H", <incomplete sequence \375\267>, position=..., face=10, 
        adjust=true)
        at /home/nadia/Software/Games/gemrb-0.8.4/gemrb/core/GameScript/GSUtils.cpp:1179
    1179	{
    (gdb) p actor->GetScriptName()
    $3 = 0xa69a208 ""
    
    
  3.  

    tell me if a new breakpoint of MoveBetweenAreasCore gets hit or not and what the Persistent check printed.

     

    It found a second breaking point:

    (gdb) p actor->GetScriptName()
    $2 = 0x8b245a8 "acbresmi"
    (gdb) c
    Continuing.
    
    Breakpoint 1, GemRB::GameScript::LeaveAreaLUA (Sender=0x887bc18, 
        parameters=0xb09cac0)
        at /home/nadia/Software/Games/gemrb-0.8.4/gemrb/core/GameScript/Actions.cpp:3098
    3098	{
    (gdb) p actor->Persistent()
    No symbol "actor" in current context.
    (gdb) b GemRB::MoveBetweenAreasCore
    Breakpoint 2 at 0xb6a965a0 (3 locations)
    (gdb) c
    Continuing.
    
    Breakpoint 2, 0xb7e7cea0 in GemRB::MoveBetweenAreasCore(GemRB::Actor*, char const*, GemRB::Point const&, int, bool)@plt ()
       from /usr/local/lib/gemrb/libgemrb_core.so.0.8.4
    

    Edit:

     

    Please try changing that RestParty to NoAction and recompiling the dialog — does no time pass, no resting happen in the original?

     

    Having a little problem here, since I can't get this installation to run either with wine (tried with multiple versions) anymore nor on a windows VM. I guess I'll set up another BGT installation on the VM for testing purposes... I tried already on GemRB with the edited dialgogue file: at least here removing the RestParty() also removes the second rest cycle.

     

    Nevermind, found another Windows installation along with a fitting save game for testing. So the original dialogues with the RestParty action cause 1 rest on IE, 2 rests on GemRB. Replacing RestParty with NoAction cause no rest on the IE, 1 rest on GemRB (I tested this on both BGT and BG2-only installations). So it seems IE does indeed handle rests differently than GemRB. Btw, I tried to find a case to test with GemRB on an unmodded game, but I can't think of a vanilla rest dialogue, only talks that happen after rest, like Imoens' right after first resting in the Irenicus dungeon).

     

     

    Spellcasting on rest is new, yes, and externalised, so you could edit the 2da and for example add stoneskin refreshing to it.

     

    Awesome, so you can automatize long duration buffing?! Which 2da do I edit?

  4.  

    Do you know what makes the mod bgt-only?

     

    Being no modder or anything, I don't understand enough of this stuff to really answer that. According to the readme, the mod requires the BP-BGT-Worldmap, seems it adds areas there. That's one thing. The readme also states that it won't work with BG2 only or Tutu and might ruin the whole installation if tried to install on those. There's content for both BG1 and BG2 + ToB. The appending to area scripts is probably BGT specific (unless Tutu uses the same area codes). Beyond that, I'm at a loss here, sorry.

     

     

     

    re rest: so how much time does then pass in the original? No screenshots needed.

     

    One rest happens. Usually I have the 'rest until healed' option activated, so it's either 8 hours or more if there's no healer available. With GemRB on the other hand, checking this options doesn't seem to do anything at all, rest is always 8 hours, while it neatly lists who did cast healing spells on whom during rest (something I don't remember from the original). This particular dialogue was just an example, however, it always does two rests when there's dialogue occuring on rest.

  5.  

    rest: now I'm completely confused. If the original also did two rests, where is the problem?

     

    Misunderstanding here: There are no two rests with the original IE, nor are there supposed to be. To me, this is an GemRB-only problem.

     

     

     

    gdb: you just run gemrb from the console as before, but prefix gdb. Then type "run" ® and once it crashes "backtrace" (bt). That's the info I'm looking for. You can use ctrl-j and ctrl-y to get to the relevant game part faster. You could also set the relevant game vars and just teleport to the area, all through our own console.

     

    'kay, I made my way to the right point in the quest and tried with gdb, here's what it said:

    Program received signal SIGSEGV, Segmentation fault.
    0xb7ebd086 in GemRB::Map::AddVVCell (this=0x0, vvc=0xa4f1e70)
        at /home/nadia/Software/Games/gemrb-0.8.4/gemrb/core/Map.cpp:2252
    2252	{
    (gdb) backtrace
    #0  0xb7ebd086 in GemRB::Map::AddVVCell (this=0x0, vvc=0xa4f1e70)
        at /home/nadia/Software/Games/gemrb-0.8.4/gemrb/core/Map.cpp:2252
    #1  0xb7ef9d42 in GemRB::CreateVisualEffectCore (Sender=0xaf8c578, 
        position=..., effect=0xa8d48cc "spcrtwpn", iterations=0)
        at /home/nadia/Software/Games/gemrb-0.8.4/gemrb/core/GameScript/GSUtils.cpp:817
    #2  0xb7eed33d in GemRB::GameScript::CreateVisualEffectObject (
        Sender=0x8536480, parameters=0xa8d48a8)
        at /home/nadia/Software/Games/gemrb-0.8.4/gemrb/core/GameScript/Actions.cpp:1910
    #3  0xb7f041ff in GemRB::GameScript::ExecuteAction (Sender=0x8536480, 
        aC=0xa8d48a8)
        at /home/nadia/Software/Games/gemrb-0.8.4/gemrb/core/GameScript/GameScript.cpp:2428
    #4  0xb7f53265 in GemRB::Scriptable::ProcessActions (this=0x8536480)
        at /home/nadia/Software/Games/gemrb-0.8.4/gemrb/core/Scriptable/Scriptable.cpp:575
    #5  0xb7f5337b in GemRB::Scriptable::Update (this=0x8536480)
        at /home/nadia/Software/Games/gemrb-0.8.4/gemrb/core/Scriptable/Scriptable.cpp:325
    #6  0xb7ec5a6c in GemRB::Map::UpdateScripts (this=0xa62dd88)
        at /home/nadia/Software/Games/gemrb-0.8.4/gemrb/core/Map.cpp:755
    #7  0xb7e964ce in GemRB::Game::UpdateScripts (this=0x841fc70)
    ---Type <return> to continue, or q <return> to quit---return
        at /home/nadia/Software/Games/gemrb-0.8.4/gemrb/core/Game.cpp:1495
    #8  0xb7ea5ef2 in GemRB::Interface::GameLoop (this=0x804a038)
        at /home/nadia/Software/Games/gemrb-0.8.4/gemrb/core/Interface.cpp:2944
    #9  0xb7eac257 in GemRB::Interface::Main (this=0x804a038)
        at /home/nadia/Software/Games/gemrb-0.8.4/gemrb/core/Interface.cpp:991
    #10 0x08048a94 in ?? ()
    #11 0xb7b00a63 in __libc_start_main (main=0x3, argc=134515505, argv=0x0, 
        init=0x8048b52, fini=0x80489f0, rtld_fini=0x3, stack_end=0xbffff504)
        at libc-start.c:287
    #12 0xb7fff000 in ?? () from /lib/ld-linux.so.2
    Backtrace stopped: previous frame inner to this frame (corrupt stack?)
    
    

    I hope this is what you are looking for?

  6.  

    Something else about intoxication — how do mods detect it? I don't see any triggers or a separate state.

     

    Two examples from cmorgans' Aran Whitehand and Kulyoks' Xan:

     

    CheckStatGT("c-aran",40,INTOXICATION)

    CheckStatGT(Player1,50,INTOXICATION)

     

     

     

    kivan is something I have to try afresh and recheck. In a previous game there was a problem with his spawning, so he was almost impossible to recruit.

     

    I think this is what you're referring to: http://gibberlings3.net/forums/index.php?showtopic=17367 But I had removed this particular part of his script before already due tue the problems it causes. Didn't plan on attacking him anyway.

     

     

     

    gdb as in the gnu debugger. :) Weidu logs are useless here.

     

    Oi, sorry. Not a programmer here. I downloaded it and am figuring out how this works, since I never had to debug anything before :D And of course, the idea to keep savegames from the crash didn't occur to me before, so I'll have to start a new game. Meaning - it might take a while.

  7. About the rest thingy: I made screenshots for you to document it - it seems the game time is actually advanced 16 hours due to 2 rest cycles:

     

    post-2064-0-87296300-1489311730_thumb.jpg post-2064-0-71103400-1489311745_thumb.jpg

     

     

    This was a banter triggering on rest between Yeslick and Imoen from the BG1 NPC Project on BGT:

    /* AT REST */
    /* Imoen's bedtime story */
    CHAIN IF WEIGHT #-2 ~%BGT_VAR% Global("X#YEIM1","LOCALS",1)~ THEN ~%YESLICK_JOINED%~ YEIM1
    @102
    DO ~SetGlobal("X#YEIM1","LOCALS",2)~
    == ~%IMOEN_BANTER%~ @103
    == ~%YESLICK_BANTER%~ @104
    == ~%IMOEN_BANTER%~ @105
    == ~%YESLICK_BANTER%~ @106
    == ~%IMOEN_BANTER%~ @107
    == ~%YESLICK_BANTER%~ @108
    == ~%IMOEN_BANTER%~ @109
    == ~%YESLICK_BANTER%~ @110
    = @111
    = @112
    = @113
    = @114
    == ~%IMOEN_BANTER%~ @115
    DO ~RestParty()~
    EXIT
    

    What I got wrong is the order how things happen: The dialogue occured first, then 2 rests, along with the rest movies, as you can see in the GemRB.log.

    gemrb.log

  8.  

    I don't think we draw ambiental lightnings at all — couldn't you even get hit by it?

     

    Right, now that you mention it, I remember you really could get struck by lightning in BG1 - has been years since I played on the original IE. My guess is that the lightning sounds are supposed to be played once in a while when it's raining, they are ambient sounds, and that the same happens like with that random character comments. They just go off only on entering a new area.

     

     

     

    Freezing containers: not enough data.

     

    I included a screenshot because it's kinda hard to explain. You can see the graphics issue as well what's happening in the terminal in that moment. The GemRB.log is also attached.

     

    post-2064-0-26410200-1489168305_thumb.jpg

     

     

     

    Subwindows vs dialog: known problem, but hard to hit, since the rest is handled. The windowing rewrite would make this more pleasant. I doubt you need to kill X though, why not just gemrb? Maybe you can even pop open the gemrb console and stop the cutscene or just quit. Only BG1 forced unpause during inventory checking, the rest have it arbitrary.

     

    When it freezes due to this issue, nothing will work anymore, can't open the GemRB console. All I can do then is Ctrl + Alt + Backspace.

     

     

     

    Rest: are you sure (gametime)?

     

    It goes like this: Klick the rest button, the Rest movie is played, THEN the dialogue shows up, then the Rest movie plays again. In the console below its says twice that I've rested for 8 hours. I didn't, however, pay attention to the game time, I'll be sure to check it from now on and report back if I know for sure.

     

     

     

    IsGabber is different between games, but checks the speaker. Can you give a concrete simple test case, as I don't see any vanilla uses

     

    I guess most NPC mods nowadays include Player Initiated Dialogue - so whatever you have installed, does it work if you try to talk to the NPCs? Examples are Kivan and Sarah, both are hosted here. But I had that problem literally with every NPC mod, so I replace the IsGabber before I even install anything now.

     

     

     

    Nalia: old problem, mostly due to data, hit and miss. If she manages to exit in time, the whole thing is avoided. As for people staying, global actors can be present for tick or two on load sometimes or if scheduling changes or some more obscure stuff.

     

    I have had one case where it won't work at all, it's Kivan. After he approaches you at Waukeen's Promenade, he's supposed to go away if you don't recruit him. But he just keeps standing around there forever. This is from p#kivan.d:

    IF ~NumTimesTalkedTo(0)~ THEN BEGIN P#MeetKivan
    SAY @2
    IF ~~ THEN DO ~SetGlobal("X#TalkedToKivan","GLOBAL",1)~ EXTERN P#KIVAN KivanStartChain
    END
    
    IF ~~ THEN BEGIN Refuse
    SAY @3
    IF ~~ THEN REPLY @4 GOTO ComeAlong
    IF ~~ THEN REPLY @5 GOTO PoliteRefuse
    IF ~~ THEN REPLY @6 GOTO GetLost
    END
    
    ...
    
    IF ~~ THEN BEGIN PoliteRefuse
    SAY @12
    IF ~~ THEN DO ~EscapeArea()~ EXIT
    END
    

     

    Can you run/install gdb and check where it crashes? From the code, I see clear potential only in a corner case where it managed to execute before the target is properly placed in an area.

     

    I let the G3 debugging suite run for this modders' prefix (ac). Unfortunately I also have his quest pack installed. The spell checker wouldn't install:

    Installing [Spell Checker] [3]
    Copying 1 file ...
    Appending to files ...
    Copying and patching 1 file ...
    
    ERROR locating resource for 'COPY'
    Resource [^ac.+/.spl$] not found in KEY file:
    	[./chitin.key]
    Stopping installation because of error.
    
    ERROR Installing [Spell Checker], rolling back to previous state
    Will uninstall   1 files for [g3_debugging_suite/setup-g3_debugging_suite.tp2] component 4.
    Uninstalled      1 files for [g3_debugging_suite/setup-g3_debugging_suite.tp2] component 4.
    ERROR: Failure("resource [^ac.+/.spl$] not found for 'COPY'")
    PLEASE email the file setup-g3_debugging_suite.debug to webmaster@camagna.net
    
    

    Here are the other logs. I hope that's what you were after.

     

    debugger_area_checker.log

    debugger_creature_checker.log

    debugger_creature_inventory_checker.log

    debugger_item_checker.log

     

     

    cutscenes and dreams: I think this is the same thing that can happen with Viconia. In that case I thought it was related to our Fade*Color mechanics (original not understood perfectly yet), which would fit your second example. If it turns out it's the same problem as the first, that'd be great, as it's much simpler

     

    The first example, that has no FadeToColor stuff included, unfortunately causes the same getting stuck in cutscene mode. Just saying... It is from cmorgans' Aran Whitehand btw., which is in the making here at G3.

     

     

    GemRB.log

  9. All oberservations below I've made on several BG2 and BGT installations, so just making a new install won't fix them. Using the English version of BG2, OS is Linux. Mods installed in the order suggested by the BigWorld installation manual, weidu.log attached.

    Script related

    - Cutscenes triggering on rest like dreams can cause you to get stuck in cutscene mod. So mods adding dreams could be troublesome. I also found that some modders use cutscenes to prevent multiple dreams / rest banters from firing, a method Berelinde came up with, according to comments in some scripts. Examples:

     

    /* stolen from berelinde's b!rest4.baf - POCKET PLANE - cutscene "rest" that runs after a night talk, 
    preventing dreams or other rest banters from kicking in when the usual RestParty() events aren't wanted - 
    be careful with this one! Look at her work before using */
    
    IF
      True()
    THEN
      RESPONSE #100
        CutSceneId(Player1)
        Rest()
        ActionOverride(Player2,Rest())
        ActionOverride(Player3,Rest())
        ActionOverride(Player4,Rest())
        ActionOverride(Player5,Rest())
        ActionOverride(Player6,Rest())
        StartMovie("POCKETZZ")
        MoveViewObject(Player1,INSTANT)
        Wait(1)
        EndCutSceneMode()
    END
    
    IF
    	InParty(Myself) 
    	See(Player1)
    	Global("ACBREFRIENDACTIVE","GLOBAL",1)
    	Global("ACBREBANTER1","LOCALS",3)
    	CombatCounter(0)
    	!See([ENEMY])
    	!StateCheck("ACBRE",CD_STATE_NOTVALID)
    	!StateCheck(PLAYER1,CD_STATE_NOTVALID)
    THEN
    	RESPONSE #100
    		SetGlobal("ACBREFRIENDACTIVE","GLOBAL",2)
    		StartCutScenemode()
    		FadeToColor([20.0],0)
    		Wait(2)
    		PlaySong(999990)
    		MoveViewObject("ACBRE",INSTANT)
    		FadeFromColor([20.0],0)
    		Wait(3)
    		StartDialogNoSet(Player1)
    END
    

    Again, I'm getting stuck in cutscene mode for good here.



    - Noticed on several occaisons that NPCs stay in the area while they're supposed to leave and move elsewhere. Mostly mod added ones, but a good example is also Nalia in the Copper Coronet: When she approaches you about helping her to free her keep, and you send her ahead and agree to meet her there, she won't leave, but immediately start with her next dialogue: 'There you are! I have waited positively ages for you...'


    GUI related

    - Learning new spells from scrolls often requires several attempts. The 'added new spell to your mage book' dialogue pops up, but the scroll is still there and the spell is not in the book. It also hardly ever works while the game is paused (combined with the above mentioned issue learning a whole bunch of new spells can be pretty annoying). The weirdest thing is one Vocalize scroll found in the Irenicus dungeon on the start of BG2. It won't get destroyed in the learning process at all. Again, observed on every one of the various installations I had. This allows for an exploit to get xp when unlearning / learning it again and again.

    Sound related

    - As already mentioned in the previous thread, animation soundsets don't work in BG2 for creatures like monsters, animals and shapeshifted characters. More testing showed that the problem is there on a fresh and unmodded installation, but strangely on my BGT installation only for the BG2 portion of the game. In the BG1 part all is fine.

    - Recently I noticed another thing that fits here on BGT: The lightning ambient sound also seems only to fire when changing areas, also when entering an interior. Furthermore, it's sometimes extremely loud (I read about louder sound effects on GemRBs website, so this is nothing new). This was so annoying that I removed them from defsound.2da for the time being.


    Fixed:
    - Scripts running on rest using the actions Rest() or RestParty() cause two rest cycles on GemRB, unlike IE

    - The IsGabber() trigger doesn't seem to work - at least not with mod added stuff. Affects mostly PIDs from mod NPCs - to make them work, I replaced 'IsGabber(Player1)' with 'True()' in the d files prior to installing the mods.

    - The characters may have pink shadows in the inventory screen on a BGT installation after biffing - this also came up already in another thread, but I just had it again. Extracted the bams from a BG2 game and dropped them in the override to get rid of the pinkness.

    - Starting a new BG2 game in BGT causes charname to start at ToB like level (already mentioned elsewhere). But the NPCs also seem to use ToB dialogues, at least when it comes to the Player initiated dialogue, and the saves end up with the ToB saves. Copying them manually from the mpsave to the save folder won't work either, gemrb.log speaks of no 'fitting worldmap'.

    - Can't seem to get a character intoxicated when drinking alcohol in a tavern. Lots of mod NPCs have extra content that shows up only when being drunk, and I can't seem to get anyone drunk. Did I not have them drink enough or is it maybe not implemented yet?

    - Also already mentioned: The characters' random comments about fatigue, day / night, area type (dungeon / city / wilderness) don't fire immediately, but seem to be carried over to another area and then fire all at once upon entering a new area.


    Deferred:
    - Containers in the inventory are not accessible in stores (again, I read somewhere that it isn't implemented yet?)

    - When opening a container (also looting bodies) the lower part of the screen can somehow 'freeze up' and displace against the upper part (I think I read about this in another post, just can't seem to find it again).

    - When in the inventory or the mage book / priest scroll screen and looking at an item or spell description, a dialogue firing will cause the whole game to freeze up completely. On Linux all that's left is killing X. Just having the inventory / mage book / priest scroll open is okay, though. I think in the original IE opening those screens should pause the game, and that would be a good thing for GemRB, too, imho.

    - Cernd's shapeshifting doesn't seem to work properly. The attack item that has the actual polymorph effect on it ends up in the inventory without getting equipped. It can be equipped manually to change him into were form. Changing back to natural form does nothing, and the item remains in the inventory. It can be kept in a weapon slot and be used to shapechange him. Using the 'Change into werewolf' ability multiple times will create multiple of the attack items. The shapechanging works flawlessly in the Bear Walker ranger kit though, that allows the character to change into a were bear.


    Other:
    - (CTD fixed, needs a deeper inspection why the npc didn't get moved) Another matter from a cutscene script from Ascalons' Breagar mod (a German BGT-only NPC):
    CreateVisualEffectObject("spcrtwpn","ACBRESMI") and CreateVisualEffectObject("SPWHIRL","ACBRESMI") cause a CTD with a Segmentation fault. While I don't have played this one on IE, I think it's safe to assume this stuff works on the IE. The last thing gemrb.log says is that the vvc's have been found in chitin.key, that's it. Commenting those out lets the cutscene run. I'm using the proprietary NVidia driver, if that's important. Here's the whole script (accut_01.bcs):

    IF
    True()
    THEN
    RESPONSE #100
    CutSceneId(PLAYER1)
    Wait(1)
    FadeToColor([20.0],0)
    Wait(2)
    ActionOverride(Player2,LeaveAreaLUA("AC6701","",[651.547],10))
    ActionOverride(Player3,LeaveAreaLUA("AC6701","",[762.666],10))
    ActionOverride(Player4,LeaveAreaLUA("AC6701","",[682.617],10))
    ActionOverride(Player5,LeaveAreaLUA("AC6701","",[633.582],10))
    ActionOverride(Player6,LeaveAreaLUA("AC6701","",[602.523],10))
    ActionOverride("ACBRESMI",LeaveAreaLUA("AC6701","",[851.508],10))
    LeaveAreaLUAPanic("AC6701","",[758.620],10)
    LeaveAreaLUA("AC6701","",[758.620],10)
    Wait(1)
    FadeFromColor([20.0],0)
    Wait(2)
    CreateVisualEffectObject("spcrtwpn","ACBRESMI")
    Wait(2)
    ActionOverride("ACBRESMI",Swing())
    Wait(2)
    DisplayStringHead("ACBRESMI",@5000)
    Wait(1)
    CreateVisualEffectObject("spcrtwpn","ACBRESMI")
    Wait(2)
    ActionOverride("ACBRESMI",Swing())
    Wait(3)
    DisplayStringHead("ACBRESMI",@5001)
    Wait(1)
    ClearAllActions()
    CreateVisualEffectObject("SPWHIRL","ACBRESMI")
    PlaySound("EFF_P69")
    Wait(1)
    FadeToColor([20.0],0)
    ActionOverride("ACBRESMI",DestroySelf())
    Wait(1)
    CreateCreature("ACBreRed",[851.508],10)
    Wait(1)
    FadeFromColor([20.0],0)
    Wait(2)
    CreateCreature("ACTAEROM",[410.547],10)
    Wait(1)
    ActionOverride("ACTAEROM",StartDialogNoSet(PLAYER1))
    END





     

    weidu.log

×
×
  • Create New...