Choose Your Language

Monday, 3 December 2018

The Adventure Continues .... 5. Freewill v Predestination. (Combat TMI)

Since the last session, I have been concentrating on streamlining the code to improve performance ... again. It has come to light that what works well in a SP game does not always translate to a MP game. In particular, if a player has a GUI open that is making "Update" calls, that GUI instance may work well for one player having it open, but as soon a you have more players accessing the same GUI at the same time, the number of update calls from any such GUI requires paring back or else we end up with a Too Many Instructions (TMI) problem, railroading the server to a quick termination. We experienced this in two cases last time we played, one with the (altered) Character Sheet GUI, and the worst case with the home brew Targeting GUI, which was the last thing we tested before ending the session. Although, the TMIs with that GUI would have insisted such anyway. More on this below. On the back of this experience, I am going to look at the remaining XML scripts and try to alter/fix any remaining scripts that may cause a similar MP issue with TMIs.

Other than that, the session went reasonably smoothly for the 1 hour 37 minutes of unpaused play that we had. (We also started slightly later.) You can catch up on the heroes actions further below. Also note, there are a couple of GAME UPDATES of which to be aware.

The List of Fixes

1) CHARACTER SHEET (TMI): This was our first experience of a GUI opened by more than one player at a time causing an issue. A quick check of the characterscreen.xml showed the alteration I had made for displaying temporary hit points was the likely cause of the issue. It worked using an OnUpdate call without any restriction to that update, meaning it was making the same server call dozens, if not hundreds of time per second. Furthermore, the script it called, gui_fixtemp, had no limit set to the number of times the call would update the GUI, which meant the GUI was calling and updating many times for each player that had it open. The XML now has a limit set to a call only every 0.5 seconds. Furthermore, that call does nothing now, unless there is a need to update the GUI. This problem had escaped our attention until now, because each player was unlikely to have the same GUI open at the same time. However, the players had just leveled and so both players were now trying to look at their Character Sheets at the same time. To workaround the problem on the night, we simply did one player at a time.

2) DOOR LOCKED PCS INSIDE: This problem arose due to a door heartbeat check no longer allowing a DM presence to keep a door unlocked. However, the code was wrong in another way too, so it has now been fixed to ensure interior doors do not lock (if not locked) anyway. Workaround: As a DM was present, the DM simply unlocked the door to allow the players to exit.

3) TACTICAL GUI FEEDBACK (TMI): As the session drew to a close, I asked my players to consider performing one last action that we knew would involve combat, so that I could test that the new TARGETING GUI would work in a MP session as well as it did in SP. (I had not yet been able to test this in a MP environment.) I am glad we tried it, as the test showed there was a problem: the game stuttered and ground to a halt. At least now I could examine the issue and have it fixed before the next session. It turned out the problem was similar to the Character Sheet problem (item 1 above), but much worse. In this case, it was due to the altered noticewindow.xml that was being automatically called at the same time for all players (3 in our case) and had an OnUpdate set at maximum (no limit) to call a reasonably large script (involving multiple loops) dozens of times per second for every player. It was no wonder that the server ground to a halt and crashed. As I stated above, this kind of multiple call may work for a SP game, but it is just too much in a MP game. This is what I did to fix the problem: Firstly, as the main script call (gui_updatetargets) involved loops for all PCs anyway, there was little point calling the same script for every player (to do exactly the same thing each time), and so I restricted the called script to work from the host player only. Secondly, I limited the OnUpdate call to 0.1 seconds (meaning to call only every 0.1 seconds). The combination of these two fixes alone limited the instructions for the TARGETING GUI feedback by hundreds of times. Furthermore, I put in place some other checks that helped alleviate script execution when it was called anyway. The result: A smooth operation. (I have yet to test the system with the player on WAN, but testing locally has shown good results.)

4) MISSING HOLY BOOK: When Graham rested his PCs at the Bloated Buckle, one of his PCs (Elana the cleric) failed to learn any prayers, even though they had paid for expensive accommodation. It turned out that the cleric had "lost" her holy book. It was no longer in her inventory. My suspicion at this stage is that this was related to the COMPANION and their equipment bug on a player leaving the game. (See last blog post.) This was fixed with the last update, but Elana's missing holy book may have been collateral damage with respect to that bug and the fix at the time. Now that the companion equipment bug has been fixed (and Elana was given a new book by the DM), that problem should (hopefully) be gone. On reloading with the DM only (as a test), the cleric appeared to still have her book then. Next session we will know for sure.

5) COMPANION FOLLOW (INTERCEPTED): During some testing, I discovered there was a problem with companions following the correct player if both players controlled more than one PC. This had not been noticed prior to my own testing, as my wife (up to now) had only ever been playing a single main PC, and only Graham controlled more than one companion. The problem was due to variables NOT accommodating a MP environment. I have addressed these now and will try to locate situations where variables should also be updated to accommodate a MP environment. (My own MP testing is limited to a MP environment without a DM as host, which means I do sometimes miss MP issues depending on how I am testing at the time.)

6) OTHER MINOR STUFF: A TYPO was fixed in the Death and Raising rule. The DM calendar did not update immediately from party resting, but did on the hour. A fix has been applied but not yet tested.

Game Updates

1) AUTO-PAUSE REWORDING: The Main Menu currently has "AUTO PAUSE IF ATTACKED". This will be changed to "AUTO PAUSE IF ENEMY SENSED". This is because it more accurately describes the situation of the game pausing on enemy contact rather than any actual attack. i.e. The game can and often does pause before the player is actually aware of what the PCs have perceived. In such situations, the player may need to allow the game to be unpaused until the beginning of another round before they can target or take any action. (See next update.)

2) NO PAUSE COMBAT ROUND: If a player uses the campaign's Tactical Turn-Based Combat System, the game will now NOT allow additional pausing between combat rounds. i.e. Once the player has released the paused action, the game will not be able to be paused again until the six second round has completed, at which time the game will automatically pause itself. NB: This only applies when a player is using the Turn-Based system, which is automatically entered if they use the "AUTO-PAUSED IF ENEMY SENSED" option. (See above.)

The Heroes Return To The Bloated Buckle For A Night's Rest

The Adventure Continues ... 5. Freewill v Predestination

Did we choose to come here, or was it always meant to be?

NB: Contains spoilers for Option 1 background.

Tired as they were, the heroes were fascinated by the scriptures they found around the Sanctuary of Boran. They discovered four ancient texts that spoke of an old argument of the different religions that discussed whether one was in control of their own actions or had always been destined to carry them out. There were the Sovereignites who believed in predestination and the Kingdomites, who believed in freewill.

Shortly after musing over the topic of freewill versus predestination, Helden picked up yet more texts in a nearby bookcase. One spoke of the horrendous disease called The Scourge, which caused living beings to turn into what resembled the undead. The second book went into details about a substance called the Life Essence and discussed the nature of good and evil. It was yet another fascinating read and one that nearly caused division in the party, had not Threska decided that the rest of the party may be right after all, and determined to take on board a change of religion. A rare thing indeed to witness such a change of heart in a person. The heroes decided they would aim to be Channelers, an action that asserted goodness in nature. However, in the light of what they had just been reading regarding freewill versus predestination, there was more than one hero that paused just a moment to consider whether it really was their choice or something predestined?

It was approaching midnight by the time the heroes decided to return to the Bloated Buckle and turn in for the night. The group were already quite fatigued, and Orechin, who had already locked up the sanctuary for the night, had to unlock the door before seeing them out. (See item 2 fix above.)

As the heroes made their way to the inn, they heard a scream. It was a blood-curdling sound that sent their hearts racing, and they paused briefly deciding whether to investigate it or not. After all, they were truly tired and did not want to run the risk of falling foul of night crime while in such a state. Then a voice in their conscience alerted them to the fact that they were supposed to be the heroes, and maybe it was their place to investigate. Clearly, it sounded like somebody was in need of help. So, they made the decision to run towards the scene. They arrived just at the same time as one of the guards turned up and all witnessed that a male figure had been murdered! 

Helden was a little hesitant to get involved and wanted to get back to the inn, but Myara was curious and wanted to investigate a bit more. She examined the body and found a picture of a woman on it. The guard quizzed Myara about it, but said they could hang onto it if they would try to do a bit more investigating, and report back to Taloy or Orechin on their findings. The heroes agreed.

Eventually, the heroes did make it back to the inn, and Myara wasted no time in quizzing both Karl and Sandy about the girl in the picture. Karl had not recalled seeing her (after a little persuasion to talk about it), while Sandy was reasonably certain it was Sophie, the daughter of Kathy, the trader at the Apothecary. She said to check with Taloy, which when they did, appeared to confirm this was quite possible. However, Taloy was reluctant to speak about her due to the way she had only recently died herself under suspicious circumstances. He recommended that they speak with Orechin, as he dealt with her death.

So, as the heroes turned in for another night at the local inn, they had managed to gather more tasks under their belt. And as the heroes settled down for the night, Myara's thoughts went to solving the murder mystery, Karasten wondered more about the Arcaene Lore spells he had read about in the book that the heroes bought from Orechin, Helden considered and imagined himself taking up a little crafting, and Elana thought long and hard about whether she was making the decisions in her life ... or whether somebody else really was controlling her actions. In all, every party member had their own reason to start afresh the next day ... as long as their thoughts did not distract them from sleeping.

TOTAL SESSION TIME (UNPAUSED): 1 Hrs 37 Minutes. (Late start.)

There were also a couple of questions raised about the mechanics, which I will answer for the record here too:-

1) When Do Henchmen Level? Henchmen level at a rate of a level or two behind the PC they follow.

2) What About the Level of Late Comers? If a companion or henchman is asked to leave the party: at the next time they are asked to join, they will level (gain experience) to a comparable level to the party average. The player can then level that character if required.

3) Automatic Storage of Keys: Every player in a MP game can own a key ring. The same is true of any auto-storage item. (Auto-storage items place items they carry automatically in them when acquired. E.g. If a player has one of their PCs pick up a key and any one of their PCs owns a key ring, the key will automatically be placed into the key ring item.) Note, however, items passed from player to player are NOT automatically placed into such containers and must be done so manually.

Sandy Speaks To the Heroes About Sophie, The Girl In The Picture

No comments: