Button.SetHotKey('m') # workaround for proper closure with ESC Button = Window.GetControl(99) if not Button: Button = Window.CreateButton(99, 0, 0, 0, 0) Button.SetEvent(IE_GUI_BUTTON_ON_PRESS, CloseMapWindow) Button.MakeEscape() return def CloseMapWindow(): global WorldMapControl, AreaMapControl WorldMapControl = None AreaMapControl = None GUICommonWindows.CloseTopWindow() ToggleMapWindow = GUICommonWindows.CreateTopWinLoader( 0, "GUIMAP", GUICommonWindows.ToggleWindow, InitMapWindow) OpenMapWindow = GUICommonWindows.CreateTopWinLoader( 0, "GUIMAP", GUICommonWindows.OpenWindowOnce, InitMapWindow) def OpenTravelWindow(): Window = OpenMapWindow() InitMapWindow(Window, True) return
color = {'r' : 30, 'g' : 8, 'b' : 0, 'a' : 0xff} WorldMapControl = WMap = Window.ReplaceSubview (4, IE_GUI_WORLDMAP, "FONTDLG", "WMPTY", color, color, color) WMap.SetVarAssoc ("Travel", Travel) #center on current area WMap.Scroll (0,0) WMap.Focus() if Travel != -1: WMap.SetEvent (IE_GUI_WORLDMAP_ON_PRESS, GUIMACommon.MoveToNewArea) # Done Button = Window.GetControl (0) Button.SetText (1403) Button.SetEvent (IE_GUI_BUTTON_ON_PRESS, lambda: Window.Close()) ToggleMapWindow = GUICommonWindows.CreateTopWinLoader(3, "GUIMA", GUICommonWindows.ToggleWindow, InitMapWindow, None, WINDOW_TOP|WINDOW_HCENTER) OpenMapWindow = GUICommonWindows.CreateTopWinLoader(3, "GUIMA", GUICommonWindows.OpenWindowOnce, InitMapWindow, None, WINDOW_TOP|WINDOW_HCENTER) def NoteChanged (Edit): Edit.SetFlags(IE_GUI_VIEW_IGNORE_EVENTS, OP_OR) Text = Edit.QueryText () Edit.SetText ("") PosX = GemRB.GetVar("MapControlX") PosY = GemRB.GetVar("MapControlY") GemRB.SetMapnote (PosX, PosY, 1, Text) Map = GemRB.GetView("MAP") Map.SetVarAssoc ("ShowMapNotes", IE_GUI_MAP_VIEW_NOTES) Map.SetStatus (IE_GUI_MAP_VIEW_NOTES) return
Count = 1 ScrollBar.SetVarAssoc("TopIndex", Count) RefreshInventoryWindow(Window) # PST uses unhardcoded/avslots.2da to decide which slots do what per character row = GemRB.GetPlayerStat(pc, IE_SPECIFIC) SlotMap = list(map(int, AvSlotsTable.GetValue(row, 1, GTV_STR).split(','))) InventoryCommon.SlotMap = SlotMap # populate inventory slot controls for i in range(46): InventoryCommon.UpdateSlot(pc, i) ToggleInventoryWindow = GUICommonWindows.CreateTopWinLoader( 3, "GUIINV", GUICommonWindows.ToggleWindow, InitInventoryWindow, UpdateInventoryWindow, WINDOW_TOP | WINDOW_HCENTER) OpenInventoryWindow = GUICommonWindows.CreateTopWinLoader( 3, "GUIINV", GUICommonWindows.OpenWindowOnce, InitInventoryWindow, UpdateInventoryWindow, WINDOW_TOP | WINDOW_HCENTER) InventoryCommon.UpdateInventoryWindow = UpdateInventoryWindow def RefreshInventoryWindow(Window): """Partial redraw without resetting TopIndex.""" pc = GemRB.GameGetSelectedPCSingle() # name Label = Window.GetControl(0x10000039)
PriestKnownSpellList.append(ks['SpellResRef']) Icon.SetVarAssoc("SpellButton", 100 + i) if known_cnt == 0: i = -1 for i in range(i + 1, btncount): Icon = Window.GetControl(14 + i) Icon.SetFlags(IE_GUI_BUTTON_NO_IMAGE, OP_OR) Icon.SetEvent(IE_GUI_BUTTON_ON_PRESS, None) Icon.SetEvent(IE_GUI_BUTTON_ON_RIGHT_PRESS, None) Icon.SetTooltip('') return TogglePriestWindow = GUICommonWindows.CreateTopWinLoader( 3, "GUIPR", GUICommonWindows.ToggleWindow, InitPriestWindow, UpdatePriestWindow, WINDOW_TOP | WINDOW_HCENTER) OpenPriestWindow = GUICommonWindows.CreateTopWinLoader( 3, "GUIPR", GUICommonWindows.OpenWindowOnce, InitPriestWindow, UpdatePriestWindow, WINDOW_TOP | WINDOW_HCENTER) def PriestPrevLevelPress(): global PriestSpellLevel if PriestSpellLevel > 0: PriestSpellLevel = PriestSpellLevel - 1 UpdatePriestWindow(PriestSpellWindow) def PriestNextLevelPress():
GemRB.SetVar("Equipped", Equipped) for i in range(4): Button = Window.GetControl(109 + i) Button.SetVarAssoc("Equipped", i) RefreshInventoryWindow() # populate inventory slot controls SlotCount = GemRB.GetSlotType(-1)["Count"] for i in range(SlotCount): InventoryCommon.UpdateSlot(pc, i) return InventoryCommon.UpdateInventoryWindow = UpdateInventoryWindow ToggleInventoryWindow = GUICommonWindows.CreateTopWinLoader( 2, "GUIINV", GUICommonWindows.ToggleWindow, InitInventoryWindow, UpdateInventoryWindow) OpenInventoryWindow = GUICommonWindows.CreateTopWinLoader( 2, "GUIINV", GUICommonWindows.OpenWindowOnce, InitInventoryWindow, UpdateInventoryWindow) def RefreshInventoryWindow(): Window = InventoryWindow pc = GemRB.GameGetSelectedPCSingle() # name Label = Window.GetControl(0x10000032) Label.SetText(GemRB.GetPlayerName(pc, 0))
ConfigOptButton(Window.GetControl(6), 29722, OpenGameplayOptionsWindow) # Keyboard Mappings ConfigOptButton(Window.GetControl(7), 29723, OpenKeyboardMappingsWindow) # Movies ConfigOptButton(Window.GetControl(9), 38156, OpenMoviesWindow) # game version, e.g. v1.1.0000 Label = Window.GetControl(0x10000007) Label.SetText(GemRB.Version) return ToggleOptionsWindow = GUICommonWindows.CreateTopWinLoader( 0, "GUIOPT", GUICommonWindows.ToggleWindow, InitOptionsWindow) OpenOptionsWindow = GUICommonWindows.CreateTopWinLoader( 0, "GUIOPT", GUICommonWindows.OpenWindowOnce, InitOptionsWindow) def TrySavingConfiguration(): if not GemRB.SaveConfig(): print("ARGH, could not write config to disk!!") ################################################### def OpenVideoOptionsWindow(): """Open video options window""" global VideoHelpText
Icon.SetEvent(IE_GUI_BUTTON_ON_RIGHT_PRESS, OpenMageSpellInfoWindow) spell = GemRB.GetSpell(ks['SpellResRef']) Icon.SetTooltip(spell['SpellName']) MageKnownSpellList.append(ks['SpellResRef']) if known_cnt == 0: i = -1 for i in range(i + 1, btncount): Icon = Window.GetControl(14 + i) Icon.SetFlags(IE_GUI_BUTTON_NO_IMAGE, OP_OR) Icon.SetEvent(IE_GUI_BUTTON_ON_PRESS, None) Icon.SetEvent(IE_GUI_BUTTON_ON_RIGHT_PRESS, None) Icon.SetTooltip('') ToggleSpellWindow = GUICommonWindows.CreateTopWinLoader( 3, "GUIMG", GUICommonWindows.ToggleWindow, InitMageWindow, UpdateMageWindow, WINDOW_TOP | WINDOW_HCENTER) OpenSpellWindow = GUICommonWindows.CreateTopWinLoader( 3, "GUIMG", GUICommonWindows.OpenWindowOnce, InitMageWindow, UpdateMageWindow, WINDOW_TOP | WINDOW_HCENTER) def MagePrevLevelPress(): global MageSpellLevel if MageSpellLevel > 0: MageSpellLevel = MageSpellLevel - 1 UpdateMageWindow() def MageNextLevelPress():
# each journal entry consists of the title and description # but the game displays the entry date between the two je2 = GemRB.GetString(je['Text']).split("\n", 1) JournalTitle = "\n[color=" + Color + "]" + je2[0] + "[/color]\n" if len(je2) == 1: # broken entry, bg1 style (no title) JournalText = "" else: JournalText = "\n" + je2[1] + "\n" Text.Append(JournalTitle + GemRB.GetString(15980) + JournalText) return ToggleJournalWindow = GUICommonWindows.CreateTopWinLoader( 2, "GUIJRNL", GUICommonWindows.ToggleWindow, InitJournalWindow, UpdateLogWindow) OpenJournalWindow = GUICommonWindows.CreateTopWinLoader( 2, "GUIJRNL", GUICommonWindows.OpenWindowOnce, InitJournalWindow, UpdateLogWindow) ################################################### def PrevChapterPress(): global Chapter if GameCheck.IsTOB(): firstChapter = 0 else: firstChapter = 1 if Chapter > firstChapter:
Button.SetActionInterval(200) # Done Button = Window.GetControl(0) if GemRB.GetVar("Travel") == -1: Button.SetState(IE_GUI_BUTTON_ENABLED) Button.OnPress(OpenMapWindow) else: Button.SetState(IE_GUI_BUTTON_DISABLED) Button.SetHotKey('m') return ToggleMapWindow = GUICommonWindows.CreateTopWinLoader( 2, "GUIMAP", GUICommonWindows.ToggleWindow, InitMapWindow) OpenMapWindow = GUICommonWindows.CreateTopWinLoader( 2, "GUIMAP", GUICommonWindows.OpenWindowOnce, InitMapWindow) WMWID = 2 if GameCheck.IsIWD2() else 0 OpenTravelWindow = GUICommonWindows.CreateTopWinLoader( WMWID, "GUIWMAP", GUICommonWindows.OpenWindowOnce, InitWorldMapWindow) def HasMapNotes(): return GameCheck.IsBG2() or GameCheck.IsIWD2() or GameCheck.IsPST() def AddNoteWindow(): global NoteLabel, MapWindow
def MageSelectionChanged (oldwin): global Sorcerer # added game check, since although sorcerers have almost no use for their spellbook, there's no other way to quickly check spell descriptions UpdateMageWindow(oldwin) pc = GemRB.GameGetSelectedPCSingle () Sorcerer = GameCheck.IsBG2() and Spellbook.HasSorcererBook (pc) if Sorcerer: OpenSorcererWindow (ToggleSpellWindow.Args) else: OpenMageWindow (ToggleSpellWindow.Args) ToggleMageWindow = GUICommonWindows.CreateTopWinLoader(2, "GUIMG", GUICommonWindows.ToggleWindow, InitMageWindow, MageSelectionChanged) OpenMageWindow = GUICommonWindows.CreateTopWinLoader(2, "GUIMG", GUICommonWindows.OpenWindowOnce, InitMageWindow, MageSelectionChanged) ToggleSorcererWindow = GUICommonWindows.CreateTopWinLoader(8, "GUIMG", GUICommonWindows.ToggleWindow, InitMageWindow, MageSelectionChanged) OpenSorcererWindow = GUICommonWindows.CreateTopWinLoader(8, "GUIMG", GUICommonWindows.OpenWindowOnce, InitMageWindow, MageSelectionChanged) def MagePrevLevelPress (): global MageSpellLevel if MageSpellLevel > 0: MageSpellLevel = MageSpellLevel - 1 UpdateMageWindow (MageWindow) return def MageNextLevelPress (): global MageSpellLevel
Button = Window.GetControl(27 + i) Button.SetAnimation(None) Button.SetFlags(IE_GUI_BUTTON_NO_IMAGE, OP_OR) Button.SetFlags(IE_GUI_BUTTON_PICTURE, OP_NAND) Button.SetEvent(IE_GUI_BUTTON_ON_PRESS, None) Button.SetEvent(IE_GUI_BUTTON_ON_RIGHT_PRESS, None) Button.SetTooltip('') Button.EnableBorder(0, 0) Window.Focus() return TogglePriestWindow = GUICommonWindows.CreateTopWinLoader( 2, "GUIPR", GUICommonWindows.ToggleWindow, InitPriestWindow, UpdatePriestWindow) OpenPriestWindow = GUICommonWindows.CreateTopWinLoader( 2, "GUIPR", GUICommonWindows.OpenWindowOnce, InitPriestWindow, UpdatePriestWindow) def PriestPrevLevelPress(): global PriestSpellLevel if PriestSpellLevel > 0: PriestSpellLevel = PriestSpellLevel - 1 UpdatePriestWindow(PriestSpellWindow) return
Button = Window.GetControl(6) Button.SetState(IE_GUI_BUTTON_LOCKED) Button.SetSprites('STFCTION', 0, frame, 0, 0, 0) Button.SetEvent(IE_GUI_MOUSE_ENTER_BUTTON, OnRecordsHelpFaction) Button.SetEvent(IE_GUI_MOUSE_LEAVE_BUTTON, OnRecordsButtonLeave) # help, info textarea stats_overview = GetStatOverview(pc) Text = Window.GetControl(0) Text.SetText(stats_overview) return ToggleRecordsWindow = GUICommonWindows.CreateTopWinLoader( 3, "GUIREC", GUICommonWindows.ToggleWindow, InitRecordsWindow, UpdateRecordsWindow, WINDOW_TOP | WINDOW_HCENTER, True) OpenRecordsWindow = GUICommonWindows.CreateTopWinLoader( 3, "GUIREC", GUICommonWindows.OpenWindowOnce, InitRecordsWindow, UpdateRecordsWindow, WINDOW_TOP | WINDOW_HCENTER, True) # puts default info to textarea (overview of PC's bonuses, saves, etc. def OnRecordsButtonLeave(): OnRecordsHelpStat(-1, 0, stats_overview) return def OnRecordsHelpFaction(): Help = GemRB.GetString(20106) + "\n\n" + faction_help OnRecordsHelpStat(-1, 0, Help)
if BookCount: SelectedBook = ActiveSpellBooks[0] else: SelectedBook = 0 GemRB.SetVar("SelectedBook", SelectedBook) def SelectedNewPlayer(Window): FetchActiveSpellbooks() SelectFirstActiveBook() UpdateSpellBook() return ToggleSpellBookWindow = GUICommonWindows.CreateTopWinLoader( 2, "GUISPL", GUICommonWindows.ToggleWindow, InitSpellBookWindow, SelectedNewPlayer) OpenSpellBookWindow = GUICommonWindows.CreateTopWinLoader( 2, "GUISPL", GUICommonWindows.OpenWindowOnce, InitSpellBookWindow, SelectedNewPlayer) def ResetScrollBar(): ScrollBar = SpellBookWindow.GetControl(54) GemRB.SetVar("SpellTopIndex", 0) SpellBookWindow.SetEventProxy(ScrollBar) def ScrollBarPress(): UpdateSpellBookWindow()