Gah - a solution with more questions. – EntropicLqd

Legacy:Punk129/Savegames 2k4 Gui

From Unreal Wiki, The Unreal Engine Documentation Site
Jump to: navigation, search

For my current project I played a bit with the savegame function of UT2004.

But because there is neither a GUI nor a chance to get a list of all savegames, I decided to make my own functions using config variables. (original is available here)

The parent class: Interface_SaveGamePage.uc[edit]

Because we have 2 different pages looking for the same information (load/save) we need a common parent class offering the globalconfig vars:

//=============================================================================
// © 2004 Steffen 'punk129' Windhab
// -punk129@blackshadowstudios.com-
//=============================================================================
// The parent class: Interface_SaveGamePage.uc
//=============================================================================
class Interface_SaveGamePage extends UT2K4GUIPage config(User);
 
#EXEC OBJ LOAD FILE=BSInterface.utx
 
var Automated GUIImage MyBackGround;
 
//list including all saved games
var Automated GUIList SaveGameList;
 
//textbox showing the saved map's description
var Automated GUIScrollTextBox TBDesc;
 
//check if the "empty slot" is needed
var bool bSaving;
 
//the config var saving the savegame names
var globalconfig array<string> SaveCaptions;
 
//the config var saving the savegame descs
var globalconfig array<string> SaveDescs;
 
function InternalOnOpen()
{
    local PlayerController PC;
    local BS_Pawn P;
    local int i;
 
        PC = PlayerOwner();
        P = BS_Pawn(PC.Pawn);
 
        for(i=0; i < SaveCaptions.Length; i++)
        {
                //add all saved games to the savegame list
                SaveGameList.Add(SaveCaptions[i],,SaveDescs[i]);
        }
        if (bSaving)
                //if saving add an empty slot
                SaveGameList.Add("Empty Slot");
}
 
 
function bool InternalOnDblClick(GUIComponent Sender)
{
        //added for delegate
        return true;
}
 
function InternalOnChange(GUIComponent Sender)
{
        if (sender == SaveGameList)
        {
                //set the textbox's content
                TBDesc.SetContent(SaveGameList.GetExtra());
        }
}
 
DefaultProperties
{
        OnOpen=InternalOnOpen
 
        Begin Object class=GUIImage name=BackGround
                WinWidth=1
                WinHeight=1
                WinLeft=0
                WinTop=0
                Image=Material'BSInterface.background_default'
                ImageStyle=ISTY_Scaled
                ImageRenderStyle=MSTY_Normal
                bVisible=true
        End Object
        MyBackGround=BackGround
 
        Begin Object class=GUIScrollTextBox name=TextBox_Desc
                WinWidth=0.4
                WinHeight=0.4
                WinLeft=0.55
                WinTop=0.055
                bNoTeletype=true
                bVisible=true
        End Object
        TBDesc=TextBox_Desc
 
        Begin Object Class=GUIList Name=List_Saves
                OnDblClick=InternalOnDblClick
                OnChange=InternalOnChange
                WinTop=0.055
                WinLeft=0.05
                WinWidth=0.4
                WinHeight=0.89
        End Object
        SaveGameList=List_Saves
 
 
 
        WinWidth=1.0
        WinHeight=1.0
        WinTop=0.0
        WinLeft=0.0
 
        bAllowedAsLast=true
}

The savepage: Interface_SavePage.uc[edit]

This is the guipage, where games will be saved from.

//=============================================================================
// © 2004 Steffen 'punk129' Windhab
// -punk129@blackshadowstudios.com-
//=============================================================================
// The savepage: Interface_SavePage.uc
//=============================================================================
class Interface_SavePage extends Interface_SaveGamePage;
 
var Automated GUIButton bSave;
 
function bool LeftButtonClick(GUIComponent Sender)
{
    local PlayerController PC;
    local int i;
 
        PC = PlayerOwner();
 
        if (Sender == bSave)
        {
                //get the slot for save
                i = SaveGameList.FindIndex(SaveGameList.Get());
 
                //save the game
                PC.ConsoleCommand("SaveGame "$i);
 
                //save caption and desc to the ini file
                SaveCaptions[i] = PC.Level.Title$" | "$PC.Level.Day$"/"$PC.Level.Month$"/"$PC.Level.Year$" | "$PC.Level.Hour$":"$PC.Level.Minute$":"$PC.Level.Second;
                SaveDescs[i] = PC.Level.Description;
                SaveConfig();
 
                Controller.CloseMenu(false);
        }
 
        return true;
}
 
 
//just the same, but on double click
function bool InternalOnDblClick(GUIComponent Sender)
{
    local PlayerController PC;
    local int i;
 
        PC = PlayerOwner();
 
        if (Sender == SaveGameList)
        {
                //get the slot for save
                i = SaveGameList.FindIndex(SaveGameList.Get());
 
                //save the game
                PC.ConsoleCommand("SaveGame "$i);
 
                //save caption and desc to the ini file
                SaveCaptions[i] = PC.Level.Title$" | "$PC.Level.Day$"/"$PC.Level.Month$"/"$PC.Level.Year$" | "$PC.Level.Hour$":"$PC.Level.Minute$":"$PC.Level.Second;
                SaveDescs[i] = PC.Level.Description;
                SaveConfig();
 
                Controller.CloseMenu(false);
        }
 
        return true;
}
 
DefaultProperties
{
        Begin Object Class=GUIButton Name=Button_Save
                OnClick=LeftButtonClick
                bVisible=true
                bTabStop=False
                RenderWeight=0.6
                TabOrder=0
                WinWidth=0.26
                WinHeight=0.08
                WinLeft=0.63
                WinTop=0.8
                Caption="Save Game"
        End Object
        bSave=Button_Save
 
    //add empty slot
    bSaving=true
}

screen of my dev. version: menu_save.jpg

The loadpage: Interface_LoadPage.uc[edit]

This is the guipage, where games will be saved from.

//=============================================================================
// © 2004 Steffen 'punk129' Windhab
// -punk129@blackshadowstudios.com-
//=============================================================================
// The loadpage: Interface_LoadPage.uc
//=============================================================================
class Interface_LoadPage extends Interface_SaveGamePage;
 
var Automated GUIButton bLoad;
 
function bool LeftButtonClick(GUIComponent Sender)
{
    local PlayerController PC;
    local int i;
 
        PC = PlayerOwner();
 
        if (Sender == bLoad)
        {
                //get the slot where the game is saved
                i = SaveGameList.FindIndex(SaveGameList.Get());
 
                //load the savegame
                PC.ClientTravel( "?load="$i, TRAVEL_Absolute, false);
        }
 
        return true;
}
 
 
//just the same, but on double click
function bool InternalOnDblClick(GUIComponent Sender)
{
    local PlayerController PC;
    local int i;
 
        PC = PlayerOwner();
 
        if (Sender == SaveGameList)
        {
                //get the slot where the game is saved
                i = SaveGameList.FindIndex(SaveGameList.Get());
 
                //load the savegame
                PC.ClientTravel( "?load="$i, TRAVEL_Absolute, false);
        }
 
        return true;
}
 
DefaultProperties
{
        Begin Object Class=GUIButton Name=Button_Load
                OnClick=LeftButtonClick
                bVisible=true
                bTabStop=False
                RenderWeight=0.6
                TabOrder=0
                WinWidth=0.26
                WinHeight=0.08
                WinLeft=0.63
                WinTop=0.8
                Caption="Load Game"
        End Object
        bLoad=Button_Load
 
    //don't add the empty slot, because we are loading
    bSaving=false
}

screen of my dev. version: menu_load.jpg

Related Topics[edit]