khelban12 Posted August 21, 2017 Author Share Posted August 21, 2017 Greetings once more. I tried to start a new playthrough and noticed that during the ability points screen, the recall button didn't work which was weird because in the past it worked fine. After a few seconds rolling and recalling, i noticed that the ability points were being recalled correctly and i just didn't notice it because i was only looking at the "Total" ability score. This happens because the code that updates the total display is only being run in the RollPress function. I have coded this patch that added the same code to the RecallPress function and now it seems to work fine in showing the recalled result. Edit: When testing the character generation, i noticed something by accident. I could make Paladin class as a Half-Elf. I thought that maybe some mod messed up my installation but i saw that gemrb uses its own classes.2da instead of game supplied clsrcreq.2da. This is not a major issue but i have found many discrepancies between the two as it shows in this diff which i also include in the spoiler below. Some of these changes may also need to be done for BG1. diff --git a/gemrb/unhardcoded/bg2/classes.2da b/gemrb/unhardcoded/bg2/classes.2da index 32e62fa2f..89988dbe3 100644 --- a/gemrb/unhardcoded/bg2/classes.2da +++ b/gemrb/unhardcoded/bg2/classes.2da @@ -3,22 +3,22 @@ NAME_REF DESC_REF CAP_REF SAVE MULTI ID HP USABILITY MC_WAS_ID HUMAN ELF HALF_ELF DWARF HALFLING GNOME HALFORC FIGHTER 7201 9556 1076 SAVEWAR 0 2 HPWAR 0x800 0x0008 1 1 1 1 1 1 1 RANGER 7200 9557 1077 SAVEWAR 0 12 HPWAR 0x200000 0x0100 1 1 1 0 0 0 0 -PALADIN 7217 9558 1078 SAVEWAR 0 6 HPWAR 0x100000 -1 1 0 1 0 0 0 0 +PALADIN 7217 9558 1078 SAVEWAR 0 6 HPWAR 0x100000 -1 1 0 0 0 0 0 0 CLERIC 7204 9559 1079 SAVEPRS 0 3 HPPRS 128 0x0020 1 1 1 1 1 1 1 -DRUID 7210 9560 1080 SAVEPRS 0 11 HPPRS 0x40000000 0x0080 1 1 1 1 0 0 0 +DRUID 7210 9560 1080 SAVEPRS 0 11 HPPRS 0x40000000 0x0080 1 0 1 0 0 0 0 MAGE 7203 9563 1081 SAVEWIZ 0 1 HPWIZ 0x40000 0x0010 1 1 1 0 0 2 0 THIEF 7202 9561 1082 SAVEROG 0 4 HPROG 0x400000 0x0040 1 1 1 1 1 1 1 -BARD 7206 9562 1083 SAVEROG 0 5 HPROG 64 -1 1 1 1 1 1 1 1 +BARD 7206 9562 1083 SAVEROG 0 5 HPROG 64 -1 1 0 1 0 0 0 0 FIGHTER_THIEF 7205 9572 1052 * 10 9 * 0x20000 -1 0 1 1 1 1 1 1 -FIGHTER_CLERIC 7211 9573 1053 * 6 8 * 0x4000 -1 0 1 1 1 1 1 1 +FIGHTER_CLERIC 7211 9573 1053 * 6 8 * 0x4000 -1 0 0 1 1 0 1 1 FIGHTER_MAGE 7213 9574 1056 * 3 7 * 0x2000 -1 0 1 1 0 0 2 0 MAGE_THIEF 7216 9575 1057 * 9 13 * 0x80000 -1 0 1 1 0 0 2 0 -CLERIC_MAGE 7207 9577 1058 * 5 14 * 256 -1 0 1 1 0 0 2 0 -CLERIC_THIEF 7209 9578 1065 * 12 15 * 512 -1 0 1 1 1 1 1 1 -FIGHTER_DRUID 7212 9579 1066 * 1026 16 * 0x1000 -1 0 1 1 0 0 0 0 -CLERIC_RANGER 7208 9580 1073 * 2052 18 * 1024 -1 0 1 1 0 0 0 0 +CLERIC_MAGE 7207 9577 1058 * 5 14 * 256 -1 0 0 1 0 0 2 0 +CLERIC_THIEF 7209 9578 1065 * 12 15 * 512 -1 0 0 0 0 0 1 1 +FIGHTER_DRUID 7212 9579 1066 * 1026 16 * 0x1000 -1 0 0 1 0 0 0 0 +CLERIC_RANGER 7208 9580 1073 * 2052 18 * 1024 -1 0 0 1 0 0 0 0 FIGHTER_MAGE_THIEF 7215 9576 1074 * 11 10 * 0x10000 -1 0 1 1 0 0 0 0 -FIGHTER_MAGE_CLERIC 7214 9581 1075 * 7 17 * 0x8000 -1 0 1 1 0 0 0 0 +FIGHTER_MAGE_CLERIC 7214 9581 1075 * 7 17 * 0x8000 -1 0 0 1 0 0 0 0 SORCERER 45849 45866 45856 SAVEWIZ 0 19 HPWIZ 0x40000 -1 1 1 1 0 0 0 0 MONK 45851 45867 45858 SAVEMONK 0 20 HPMONK 0x20000000 -1 1 0 0 0 0 0 0 BARBARIAN 45855 45869 45859 SAVEWAR 0 2 HPBARB 0 -1 1 1 1 1 1 1 1 * Paladins is a Human exclusive class (in 2e) so Half-Elves shouldn't be allowed to become paladins. * Only Humans and Half-Elves can become Druids so Elves, Dwarves shouldn't be allowed. * Every race in gemrb can become a bard instead of just Human and Half-Elf (my installation also allows for Elf but i seem to remember a mod adding that). * Halflings can only become Fighter/Thief so they shouldn't be allowed to become F/C, C/T. * Dwarves shouldn't be allowed to become C/T. * Half-Elves shouldn't be permitted to become C/M, C/T. * Elves shouldn't be permitted to be F/C, C/M, C/T, F/Druid, C/Ranger, F/M/C. Another silly patch i have done is about implementing Ctrl+8 in the Character Generation Screen. During character generation, when you are in the abilities screen and roll dice, the original engine permitted to give everything maxed to 18 if you pressed Ctrl+8 (According to game guides it is supposed to be Ctrl+Shift+8 but in my case it also works with just Ctrl+8 without shift). diff --git a/gemrb/GUIScripts/bg2/GUICG4.py b/gemrb/GUIScripts/bg2/GUICG4.py index afe53a124..93a735cb7 100644 --- a/gemrb/GUIScripts/bg2/GUICG4.py +++ b/gemrb/GUIScripts/bg2/GUICG4.py @@ -78,6 +78,7 @@ def CalcLimits(Abidx): def RollPress(): global Minimum, Maximum, Add, HasStrExtra, PointsLeft + global AllPoints18 GemRB.SetVar("Ability",0) GemRB.SetVar("Ability -1",0) @@ -87,7 +88,10 @@ def RollPress(): SumLabel.SetUseRGB(1) if HasStrExtra: - e = GemRB.Roll(1,100,0) + if AllPoints18: + e = 100 + else: + e = GemRB.Roll(1,100,0) else: e = 0 GemRB.SetVar("StrExtra", e) @@ -104,6 +108,8 @@ def RollPress(): v = Minimum if v>Maximum: v = Maximum + if AllPoints18: + v = 18 GemRB.SetVar("Ability "+str(i), v ) Total += v @@ -117,13 +123,25 @@ def RollPress(): # add a counter to the title SumLabel = AbilityWindow.GetControl (0x10000000) SumLabel.SetText(GemRB.GetString(11976) + ": " + str(Total)) + AllPoints18 = 0 return +def GiveAll18(wIdx, key, mod): + global AllPoints18 + if mod == 2 and key == 127: + AllPoints18 = 1 + RollPress() + return 1 + return 0 + def OnLoad(): global AbilityWindow, TextAreaControl, DoneButton global PointsLeft, HasStrExtra global AbilityTable, Abclasrq, Abclsmod, Abracerq, Abracead global KitIndex, Minimum, Maximum, MyChar + global AllPoints18 + + AllPoints18 = 0 Abracead = GemRB.LoadTable("ABRACEAD") if GemRB.HasResource ("ABCLSMOD", RES_2DA): @@ -151,6 +169,7 @@ def OnLoad(): GemRB.LoadWindowPack("GUICG", 640, 480) AbilityTable = GemRB.LoadTable("ability") AbilityWindow = GemRB.LoadWindow(4) + AbilityWindow.SetKeyPressEvent (GiveAll18) RerollButton = AbilityWindow.GetControl(2) RerollButton.SetText(11982) As always, i am blindly messing with the code here and there so there may be a way better way to implement this. I added a keypress handler to the window which checks for Ctrl+8 and sets a global variable to 1. This is checked in the RollPress function and if it is 1 then everything is set to 18. The "if mod == 2 and key == 127" check i did is horrible and definitely needs changing. I wanted to use a mask (something like mod & GEM_CTRL) so that it is better (and also works with ctrl+shift) but i couldn't find the modifiers behavior. Some keys (like 1) had no difference with ctrl or shift. Some other keys (like 3, 4, etc) had some bits shifted by ctrl and by shift and 8 changed completely (i think from 53 without ctrl to 127 with ctrl). Link to comment
khelban12 Posted August 21, 2017 Author Share Posted August 21, 2017 Thanks, it's in! Thanks for the quick response. I also did an edit after your posted in case you didn't get a notification. Link to comment
lynx Posted August 21, 2017 Share Posted August 21, 2017 clsrcreq.2da came later than classes.2da, as it's from ee. So it doesn't tell us what was the default in the originals. I'm pretty sure we're less strict though, at least for kits. GiveAll18 is necessarily ugly, but the interface changed in the subviews branch, so it may look better there. Maybe the whole thing would be better without a global (and a parameter instead), but it's such a small and shortlived file that it doesn't really matter. Link to comment
khelban12 Posted August 21, 2017 Author Share Posted August 21, 2017 clsrcreq.2da came later than classes.2da, as it's from ee. So it doesn't tell us what was the default in the originals. I'm pretty sure we're less strict though, at least for kits.I do not have EE installed. The file i compared with classes was from a normal BG2 installation. By very briefly browsing the 2e player's handbook, clsrcreq seem to coincide with proper PnP class restrictions (not that this says something since the game deviates from PnP in many aspects). Edit: It resides in tobex/tobex_redist/override/clsrcreq.2da so you are right it doesn't come with the original engine. I have years (if ever) to play without tobex so it didn't occur to me. I will try a default ToB installation without any mods at all and edit the post if the class behavior is different. GiveAll18 is necessarily ugly, but the interface changed in the subviews branch, so it may look better there. Maybe the whole thing would be better without a global (and a parameter instead), but it's such a small and shortlived file that it doesn't really matter. Yeah it is. Even the names of the function and variable are ugly but it was a test to see if it works. As always, feel free to do any modifications you like. Do you have any ideas about the keys behavior and what a better implementation would be ? Link to comment
lynx Posted August 21, 2017 Share Posted August 21, 2017 A preliminary merge suggests it will only be uglier in the other branch. Link to comment
khelban12 Posted August 22, 2017 Author Share Posted August 22, 2017 A preliminary merge suggests it will only be uglier in the other branch. Forget i sent it then. It is not a major issue anyway to be able to roll 18s. Maybe when subviews are finished, we can implement it in a better way. Link to comment
lynx Posted August 23, 2017 Share Posted August 23, 2017 It's in. I had to create an extra button, but on the other hand, the callback is much simpler, In total, I'd say it's cleaner. Link to comment
khelban12 Posted August 23, 2017 Author Share Posted August 23, 2017 It's in. I had to create an extra button, but on the other hand, the callback is much simpler, In total, I'd say it's cleaner. I still don't like the crap if clause. Also it now came to me, is it possible that mod and key have different values on other platforms ? Link to comment
lynx Posted August 23, 2017 Share Posted August 23, 2017 If you mean the one in the callback, it's gone in the subviews version. Link to comment
Recommended Posts
Archived
This topic is now archived and is closed to further replies.