gemrb: Infinity Engine emulator
The branch master has been updated
via 905a9036af3f5277c0da9ab8d8c75505d349bad2 (commit)
Summary of changes:
gemrb/GUIScripts/BGCommon.py | 7 ++-
gemrb/GUIScripts/DualClass.py | 2 +-
gemrb/GUIScripts/GUICommon.py | 23 +++++-----
gemrb/GUIScripts/GUICommonWindows.py | 1 -
gemrb/GUIScripts/GUIREC.py | 4 +-
gemrb/GUIScripts/LUCommon.py | 5 +--
gemrb/GUIScripts/bg1/CharGenGui.py | 25 +++-------
gemrb/GUIScripts/bg1/GUICG3.py | 4 +-
gemrb/GUIScripts/bg1/GUIMG.py | 2 +-
gemrb/GUIScripts/bg1/GUIPR.py | 10 +++--
gemrb/GUIScripts/bg2/CharGen6.py | 8 ++--
gemrb/GUIScripts/bg2/CharGenCommon.py | 8 +---
gemrb/GUIScripts/bg2/CharGenEnd.py | 10 ++---
gemrb/GUIScripts/bg2/GUICG15.py | 5 +-
gemrb/GUIScripts/bg2/GUICG3.py | 4 +-
gemrb/GUIScripts/bg2/GUICG4.py | 7 +--
gemrb/GUIScripts/bg2/GUIMG.py | 2 +-
gemrb/GUIScripts/bg2/GUIPR.py | 10 +++--
gemrb/GUIScripts/bg2/MessageWindow.py | 4 +-
gemrb/GUIScripts/iwd/CharGen.py | 79 ++++++++++++++-------------------
gemrb/GUIScripts/iwd/GUIMG.py | 2 +-
gemrb/GUIScripts/iwd/GUIPR.py | 10 +++--
gemrb/GUIScripts/pst/GUIINV.py | 2 +-
gemrb/GUIScripts/pst/GUIMG.py | 2 +-
gemrb/GUIScripts/pst/GUIPR.py | 4 +-
gemrb/GUIScripts/pst/GUIREC.py | 2 +-
26 files changed, 104 insertions(+), 138 deletions(-)
from 25fbc486bf9988c46af3148f7441262184ef71b0 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://gemrb.git.sourceforge.net/git/gitweb.cgi?p=gemrb/gemrb;a=commitdiff;h=905a9036af3f5277c0da9ab8d8c75505d349bad2
commit 905a9036af3f5277c0da9ab8d8c75505d349bad2
Author: Jaka Kranjc <lynxlupodian@...>
Date: Wed Nov 21 23:17:11 2012 +0100
guicommon: split out GetClassRowName
starting attempt at minimising column number based lookups. Not all our
overrides have the same layout, so it's harder to share code and mod, plus
it means we can easily add columns only at the end
diff --git a/gemrb/GUIScripts/BGCommon.py b/gemrb/GUIScripts/BGCommon.py
index baf9e1c..82feff5 100644
--- a/gemrb/GUIScripts/BGCommon.py
+++ b/gemrb/GUIScripts/BGCommon.py
@@ -20,7 +20,8 @@
import GemRB
import CommonTables
-from ie_stats import IE_RACE, IE_CLASS, IE_SEX
+import GUICommon
+from ie_stats import IE_RACE, IE_SEX
def RefreshPDoll(button, MinorColor, MajorColor, SkinColor, HairColor):
MyChar = GemRB.GetVar ("Slot")
@@ -29,8 +30,8 @@ def RefreshPDoll(button, MinorColor, MajorColor, SkinColor, HairColor):
Race = GemRB.GetPlayerStat (MyChar, IE_RACE)
AnimID = AnimID + table.GetValue(Race, 0)
table = GemRB.LoadTable ("avprefc")
- Class = GemRB.GetPlayerStat (MyChar, IE_CLASS)
- AnimID = AnimID + table.GetValue (Class, 0)
+ ClassName = GUICommon.GetClassRowName (MyChar)
+ AnimID = AnimID + table.GetValue (ClassName, "CLASS")
table = GemRB.LoadTable ("avprefg")
Gender = GemRB.GetPlayerStat (MyChar, IE_SEX)
AnimID = AnimID + table.GetValue (Gender, 0)
diff --git a/gemrb/GUIScripts/DualClass.py b/gemrb/GUIScripts/DualClass.py
index 9746ee3..ece9d54 100644
--- a/gemrb/GUIScripts/DualClass.py
+++ b/gemrb/GUIScripts/DualClass.py
@@ -126,7 +126,7 @@ def DualClassWindow ():
# class name
Kit = GUICommon.GetKitIndex (pc)
- OldClassName = CommonTables.Classes.GetRowName (CommonTables.Classes.FindValue (5, GemRB.GetPlayerStat (pc, IE_CLASS) ) )
+ OldClassName = GUICommon.GetClassRowName (pc)
if Kit:
OldKitName = CommonTables.KitList.GetValue (Kit, 0, 0)
else:
diff --git a/gemrb/GUIScripts/GUICommon.py b/gemrb/GUIScripts/GUICommon.py
index afc82a4..b1f9538 100644
--- a/gemrb/GUIScripts/GUICommon.py
+++ b/gemrb/GUIScripts/GUICommon.py
@@ -465,12 +465,16 @@ def GetKitIndex (actor):
return KitIndex
-# checks the classes.2da table if the class is multiclass/dualclass capable (bits define the class combination)
-def HasMultiClassBits(actor):
+# fetches the rowname of the passed actor's (base) class from classes.2da
+def GetClassRowName(actor):
Class = GemRB.GetPlayerStat (actor, IE_CLASS)
ClassIndex = CommonTables.Classes.FindValue (5, Class)
ClassRowName = CommonTables.Classes.GetRowName (ClassIndex)
- MultiBits = CommonTables.Classes.GetValue (ClassRowName, "MULTI")
+ return ClassRowName
+
+# checks the classes.2da table if the class is multiclass/dualclass capable (bits define the class combination)
+def HasMultiClassBits(actor):
+ MultiBits = CommonTables.Classes.GetValue (GetClassRowName(actor), "MULTI")
# we have no entries for npc creature classes, so treat them as single-classed
if MultiBits == "*":
@@ -587,7 +591,6 @@ def IsMultiClassed (actor, verbose):
return (0,-1,-1,-1)
# get our base class
- ClassIndex = CommonTables.Classes.FindValue (5, GemRB.GetPlayerStat (actor, IE_CLASS))
IsMulti = HasMultiClassBits (actor)
IsDual = IsDualClassed (actor, 0)
@@ -601,7 +604,7 @@ def IsMultiClassed (actor, verbose):
Classes = [0]*3
NumClasses = 0
Mask = 1 # we're looking at multiples of 2
- ClassNames = CommonTables.Classes.GetRowName(ClassIndex).split("_")
+ ClassNames = GetClassRowName(actor).split("_")
# loop through each class and test it as a mask
ClassCount = CommonTables.Classes.GetRowCount()
@@ -639,9 +642,7 @@ def CanDualClass(actor):
DualClassTable = GemRB.LoadTable ("dualclas")
CurrentStatTable = GemRB.LoadTable ("abdcscrq")
- Class = GemRB.GetPlayerStat (actor, IE_CLASS)
- ClassIndex = CommonTables.Classes.FindValue (5, Class)
- ClassName = CommonTables.Classes.GetRowName (ClassIndex)
+ ClassName = GetClassRowName(actor)
KitIndex = GetKitIndex (actor)
if KitIndex == 0:
ClassTitle = ClassName
@@ -719,12 +720,10 @@ def CanDualClass(actor):
return 0
def IsWarrior (actor):
- Class = GemRB.GetPlayerStat (actor, IE_CLASS)
- ClassIndex = CommonTables.Classes.FindValue (5, Class)
- ClassName = CommonTables.Classes.GetRowName (ClassIndex)
- IsWarrior = CommonTables.ClassSkills.GetValue (ClassName, "NO_PROF")
+ IsWarrior = CommonTables.ClassSkills.GetValue (GetClassRowName(actor), "NO_PROF")
# warriors get only a -2 penalty for wielding weapons they are not proficient with
+ # FIXME: make the check more robust, someone may change the value!
IsWarrior = (IsWarrior == -2)
Dual = IsDualClassed (actor, 0)
diff --git a/gemrb/GUIScripts/GUICommonWindows.py b/gemrb/GUIScripts/GUICommonWindows.py
index 0cf1857..3e1a39d 100644
--- a/gemrb/GUIScripts/GUICommonWindows.py
+++ b/gemrb/GUIScripts/GUICommonWindows.py
@@ -977,7 +977,6 @@ def GetActorClassTitle (actor, ClassIndex):
if ClassTitle:
return ClassTitle
- #Class = GemRB.GetPlayerStat (actor, IE_CLASS)
KitIndex = GetKitIndex (actor, ClassIndex)
if KitIndex == 0:
ClassTitle = CommonTables.Classes.GetValue (ClassIndex, 0)
diff --git a/gemrb/GUIScripts/GUIREC.py b/gemrb/GUIScripts/GUIREC.py
index d994562..bdfc209 100644
--- a/gemrb/GUIScripts/GUIREC.py
+++ b/gemrb/GUIScripts/GUIREC.py
@@ -331,9 +331,7 @@ def GetStatOverview (pc, LevelDiff=[0,0,0]):
# collecting tokens for stat overview
ClassTitle = GUICommon.GetActorClassTitle (pc)
GemRB.SetToken ("CLASS", ClassTitle)
- Class = GemRB.GetPlayerStat (pc, IE_CLASS)
- Class = CommonTables.Classes.FindValue (5, Class)
- Class = CommonTables.Classes.GetRowName (Class)
+ Class = GUICommon.GetClassRowName (pc)
Dual = GUICommon.IsDualClassed (pc, 1)
Multi = GUICommon.IsMultiClassed (pc, 1)
XP = GemRB.GetPlayerStat (pc, IE_XP)
diff --git a/gemrb/GUIScripts/LUCommon.py b/gemrb/GUIScripts/LUCommon.py
index fa6b980..f699851 100644
--- a/gemrb/GUIScripts/LUCommon.py
+++ b/gemrb/GUIScripts/LUCommon.py
@@ -39,9 +39,7 @@ def CanLevelUp(actor):
"""Returns true if the actor can level up."""
# get our class and placements for Multi'd and Dual'd characters
- Class = GemRB.GetPlayerStat (actor, IE_CLASS)
- Class = CommonTables.Classes.FindValue (5, Class)
- Class = CommonTables.Classes.GetRowName (Class)
+ Class = GUICommon.GetClassRowName (actor)
Multi = GUICommon.IsMultiClassed (actor, 1)
Dual = GUICommon.IsDualClassed (actor, 1)
@@ -50,7 +48,6 @@ def CanLevelUp(actor):
Levels = [GemRB.GetPlayerStat (actor, IE_LEVEL), GemRB.GetPlayerStat (actor, IE_LEVEL2),\
GemRB.GetPlayerStat (actor, IE_LEVEL3)]
- #TODO: double-check this
if GemRB.GetPlayerStat(actor, IE_LEVELDRAIN)>0:
return 0
diff --git a/gemrb/GUIScripts/bg1/CharGenGui.py b/gemrb/GUIScripts/bg1/CharGenGui.py
index 32fe7b7..71992e0 100644
--- a/gemrb/GUIScripts/bg1/CharGenGui.py
+++ b/gemrb/GUIScripts/bg1/CharGenGui.py
@@ -125,8 +125,7 @@ def unsetHateRace():
def guardHateRace():
MyChar = GemRB.GetVar ("Slot")
- Class = GemRB.GetPlayerStat(MyChar,IE_CLASS)
- ClassName = CommonTables.ClassSkills.GetRowName(Class)
+ ClassName = GUICommon.GetClassRowName (MyChar)
TableName = CommonTables.ClassSkills.GetValue(ClassName, "HATERACE")
return TableName != "*"
@@ -151,8 +150,8 @@ def unsetMageSpells():
def guardMageSpells():
MyChar = GemRB.GetVar ("Slot")
- Class = GemRB.GetPlayerStat(MyChar,IE_CLASS)
- TableName = CommonTables.ClassSkills.GetValue(Class, 2)
+ ClassName = GUICommon.GetClassRowName (MyChar)
+ TableName = CommonTables.ClassSkills.GetValue(ClassName, "MAGESPELLS")
return TableName != "*"
def getMageSpells(TextAreaControl):
@@ -179,9 +178,7 @@ def guardSkills():
if Kit != 0: # luckily the first row is a dummy
KitName = CommonTables.KitList.GetValue(Kit, 0) #rowname is just a number
else:
- ClassID = GemRB.GetPlayerStat (MyChar, IE_CLASS)
- ClassIndex = CommonTables.Classes.FindValue(5,ClassID)
- KitName = CommonTables.Classes.GetRowName(ClassIndex)
+ KitName = GUICommon.GetClassRowName (MyChar)
for i in range(RowCount):
SkillName = SkillTable.GetRowName(i+2)
@@ -201,9 +198,7 @@ def getSkills(TextAreaControl):
# thieving and other skills
info = ""
SkillTable = GemRB.LoadTable ("skills")
- ClassID = GemRB.GetPlayerStat (MyChar, IE_CLASS)
- Class = CommonTables.Classes.FindValue (5, ClassID)
- ClassName = CommonTables.Classes.GetRowName(Class)
+ ClassName = GUICommon.GetClassRowName (MyChar)
RangerSkills = CommonTables.ClassSkills.GetValue (ClassName, "RANGERSKILL")
BardSkills = CommonTables.ClassSkills.GetValue (ClassName, "BARDSKILL")
KitName = GUICommon.GetKitIndex (MyChar)
@@ -280,14 +275,12 @@ def getName(TextAreaControl):
def setDivineSpells():
MyChar = GemRB.GetVar ("Slot")
- ClassID = GemRB.GetPlayerStat (MyChar, IE_CLASS)
- Class = CommonTables.Classes.FindValue (5, ClassID)
- ClassName = CommonTables.Classes.GetRowName(Class)
+ ClassName = GUICommon.GetClassRowName (MyChar)
DruidTable = CommonTables.ClassSkills.GetValue (ClassName, "DRUIDSPELL")
ClericTable = CommonTables.ClassSkills.GetValue (ClassName, "CLERICSPELL")
- print("CGG setDivineSpells: CP1",ClassID,Class,ClassName,DruidTable,ClericTable)
+ print("CGG setDivineSpells: CP1", ClassName, DruidTable, ClericTable)
AllignID = GemRB.GetPlayerStat (MyChar, IE_ALIGNMENT)
@@ -332,9 +325,7 @@ def setAccept():
#set my character up
MyChar = GemRB.GetVar ("Slot")
- ClassID = GemRB.GetPlayerStat (MyChar, IE_CLASS)
- Class = CommonTables.Classes.FindValue (5, ClassID)
- ClassName = CommonTables.Classes.GetRowName(Class)
+ ClassName = GUICommon.GetClassRowName (MyChar)
#reputation
AllignID = GemRB.GetPlayerStat (MyChar, IE_ALIGNMENT)
diff --git a/gemrb/GUIScripts/bg1/GUICG3.py b/gemrb/GUIScripts/bg1/GUICG3.py
index a2bedb0..7c259b4 100644
--- a/gemrb/GUIScripts/bg1/GUICG3.py
+++ b/gemrb/GUIScripts/bg1/GUICG3.py
@@ -42,9 +42,7 @@ def OnLoad():
GemRB.SetVar("Alignment",-1)
- Class = GemRB.GetPlayerStat (MyChar, IE_CLASS)
- ClassRow = CommonTables.Classes.FindValue(5,Class)
- KitName = CommonTables.Classes.GetRowName(ClassRow)
+ KitName = GUICommon.GetClassRowName (MyChar)
AlignmentOk = GemRB.LoadTable("ALIGNMNT")
diff --git a/gemrb/GUIScripts/bg1/GUIMG.py b/gemrb/GUIScripts/bg1/GUIMG.py
index 3e47cdf..076b226 100644
--- a/gemrb/GUIScripts/bg1/GUIMG.py
+++ b/gemrb/GUIScripts/bg1/GUIMG.py
@@ -183,7 +183,7 @@ def UpdateMageWindow ():
Button.SetTooltip ('')
Button.EnableBorder (0, 0)
- CantCast = CommonTables.ClassSkills.GetValue (GemRB.GetPlayerStat (pc, IE_CLASS), 2) == "*"
+ CantCast = CommonTables.ClassSkills.GetValue (GUICommon.GetClassRowName(pc), "MAGESPELL") == "*"
GUICommon.AdjustWindowVisibility (Window, pc, CantCast)
return
diff --git a/gemrb/GUIScripts/bg1/GUIPR.py b/gemrb/GUIScripts/bg1/GUIPR.py
index b4e2f2e..11ae2d8 100644
--- a/gemrb/GUIScripts/bg1/GUIPR.py
+++ b/gemrb/GUIScripts/bg1/GUIPR.py
@@ -185,12 +185,14 @@ def UpdatePriestWindow ():
Button.SetTooltip ('')
Button.EnableBorder (0, 0)
- Class = GemRB.GetPlayerStat (pc, IE_CLASS)
- DivineCaster = CommonTables.ClassSkills.GetValue (Class, 1)
+ ClassName = GUICommon.GetClassRowName (pc)
+ DivineCaster = CommonTables.ClassSkills.GetValue (ClassName, "CLERICSPELL")
if DivineCaster == "*":
# also check the DRUIDSPELL column
- DivineCaster = CommonTables.ClassSkills.GetValue (Class, 0)
- CantCast = DivineCaster == "*" or GemRB.GetPlayerStat(pc, IE_DISABLEDBUTTON)&(1<<ACT_CAST)
+ DivineCaster = CommonTables.ClassSkills.GetValue (ClassName, "DRUIDSPELL")
+ CantCast = DivineCaster == "*"
+ CantCast += GemRB.GetPlayerStat(pc, IE_DISABLEDBUTTON)&(1<<ACT_CAST)
+
GUICommon.AdjustWindowVisibility (Window, pc, CantCast)
return
diff --git a/gemrb/GUIScripts/bg2/CharGen6.py b/gemrb/GUIScripts/bg2/CharGen6.py
index 296246a..21b234d 100644
--- a/gemrb/GUIScripts/bg2/CharGen6.py
+++ b/gemrb/GUIScripts/bg2/CharGen6.py
@@ -53,13 +53,13 @@ def OnLoad():
Spellbook.RemoveKnownSpells (MyChar, IE_SPELL_TYPE_PRIEST, 1,7, 1)
# learn divine spells if appropriate
- Class = GemRB.GetPlayerStat (MyChar, IE_CLASS)
- TableName = CommonTables.ClassSkills.GetValue (Class, 1, 0) # cleric spells
+ ClassName = GUICommon.GetClassRowName (MyChar)
+ TableName = CommonTables.ClassSkills.GetValue (ClassName, "CLERICSPELL", 0) # cleric spells
if TableName == "*": # only druid spells or no spells at all
- TableName = CommonTables.ClassSkills.GetValue (Class, 0, 0)
+ TableName = CommonTables.ClassSkills.GetValue (ClassName, "DRUIDSPELL", 0)
ClassFlag = 0x8000
- elif CommonTables.ClassSkills.GetValue (Class, 0, 0) != "*": # cleric and druid spells
+ elif CommonTables.ClassSkills.GetValue (ClassName, "DRUIDSPELL", 0) != "*": # cleric and druid spells
ClassFlag = 0
else: # only cleric spells
ClassFlag = 0x4000
diff --git a/gemrb/GUIScripts/bg2/CharGenCommon.py b/gemrb/GUIScripts/bg2/CharGenCommon.py
index 95d347a..f0734a4 100644
--- a/gemrb/GUIScripts/bg2/CharGenCommon.py
+++ b/gemrb/GUIScripts/bg2/CharGenCommon.py
@@ -166,9 +166,8 @@ def DisplayOverview(step):
TextAreaControl.Append (CommonTables.Aligns.GetValue (v,2))
elif part == 6:
TextAreaControl.Append ("\n")
- ClassID = GemRB.GetPlayerStat (MyChar, IE_CLASS)
- Class = CommonTables.Classes.FindValue (5, ClassID)
- hasextra = CommonTables.Classes.GetValue (Class, 3)=="SAVEWAR"
+ ClassName = GUICommon.GetClassRowName (MyChar)
+ hasextra = CommonTables.Classes.GetValue (ClassName, "SAVE") == "SAVEWAR"
strextra = GemRB.GetPlayerStat (MyChar, IE_STREXTRA)
for i in range(6):
v = AbilityTable.GetValue (i, 2)
@@ -184,9 +183,6 @@ def DisplayOverview(step):
# thieving and other skills
info = ""
SkillTable = GemRB.LoadTable ("skills")
- ClassID = GemRB.GetPlayerStat (MyChar, IE_CLASS)
- Class = CommonTables.Classes.FindValue (5, ClassID)
- ClassName = CommonTables.Classes.GetRowName (Class)
RangerSkills = CommonTables.ClassSkills.GetValue (ClassName, "RANGERSKILL")
BardSkills = CommonTables.ClassSkills.GetValue (ClassName, "BARDSKILL")
KitName = GUICommon.GetKitIndex (MyChar)
diff --git a/gemrb/GUIScripts/bg2/CharGenEnd.py b/gemrb/GUIScripts/bg2/CharGenEnd.py
index 5789a11..cb1cf11 100644
--- a/gemrb/GUIScripts/bg2/CharGenEnd.py
+++ b/gemrb/GUIScripts/bg2/CharGenEnd.py
@@ -32,9 +32,7 @@ def OnLoad():
# Lay on hands, turn undead and backstab multiplier get set by the core
# set my character up
MyChar = GemRB.GetVar ("Slot")
- Class = GemRB.GetPlayerStat (MyChar, IE_CLASS)
- ClassIndex = CommonTables.Classes.FindValue (5, Class)
- ClassName = CommonTables.Classes.GetRowName (ClassIndex)
+ ClassName = GUICommon.GetClassRowName (MyChar)
IsMulti = GUICommon.IsMultiClassed (MyChar, 1)
Levels = [GemRB.GetPlayerStat (MyChar, IE_LEVEL), GemRB.GetPlayerStat (MyChar, IE_LEVEL2), \
GemRB.GetPlayerStat (MyChar, IE_LEVEL3)]
@@ -53,7 +51,7 @@ def OnLoad():
LUCommon.SetupHP (MyChar)
# mage spells
- TableName = CommonTables.ClassSkills.GetValue (Class, 2, 0)
+ TableName = CommonTables.ClassSkills.GetValue (ClassName, "MAGESPELL", 0)
if TableName != "*":
index = 0
if IsMulti[0]>1:
@@ -88,8 +86,8 @@ def OnLoad():
# setup starting gold (uses a roll dictated by class
TmpTable = GemRB.LoadTable ("strtgold")
- temp = GemRB.Roll (TmpTable.GetValue (Class, 1),TmpTable.GetValue (Class, 0), TmpTable.GetValue (Class, 2))
- GemRB.SetPlayerStat (MyChar, IE_GOLD, temp * TmpTable.GetValue (Class, 3))
+ temp = GemRB.Roll (TmpTable.GetValue (ClassName, "ROLLS"), TmpTable.GetValue (ClassName, "SIDES"), TmpTable.GetValue (ClassName, "MODIFIER"))
+ GemRB.SetPlayerStat (MyChar, IE_GOLD, temp * TmpTable.GetValue (ClassName, "MULTIPLIER"))
# save the appearance
GUICommon.SetColorStat (MyChar, IE_HAIR_COLOR, GemRB.GetVar ("HairColor") )
diff --git a/gemrb/GUIScripts/bg2/GUICG15.py b/gemrb/GUIScripts/bg2/GUICG15.py
index 5f98247..f6d3dec 100644
--- a/gemrb/GUIScripts/bg2/GUICG15.py
+++ b/gemrb/GUIScripts/bg2/GUICG15.py
@@ -19,6 +19,7 @@
#character generation, racial enemy (GUICG15)
import GemRB
import CommonTables
+import GUICommon
from GUIDefines import *
from ie_stats import *
@@ -54,9 +55,7 @@ def OnLoad():
global RaceTable, RaceCount, TopIndex, MyChar
MyChar = GemRB.GetVar ("Slot")
- Class = GemRB.GetPlayerStat (MyChar, IE_CLASS)
- Class = CommonTables.
|