Announcement

Collapse
No announcement yet.

Mutate Spec 0.6 [BETA][PC][PS3] [Updated: August 1 2013]

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    Mutate Spec 0.6 [BETA][PC][PS3] [Updated: August 1 2013]

    Name: MutateSpec
    Version: 0.6b
    Description: Lets you switch from an active player back to spectator-mode
    Features:
    • Allow switching to spectator
    • UI integration
    • Full net support
    • Full compatibility to other mutators
    • PC: Compatible mode for mutator which are using the same commands
    • Works for instant action and online games
    • No replacement of Pawn, PlayerController classes (or anything)
    • PC: Configurable via Ini file
    • PC: Configurable via UI scene
    • PC: Configurable via WebAdmin
    • PC: ServerActor to keep server pure
    • PS3: Pre-Configured mutators
    • Optionally: No dependency of the package when playing recorded demos
    • Optionally: Restoring stats on switching back to spectator
    • Optionally: block spectators to become active players
    • Optionally: delay for changing back to player/spec
    • Optionally: Let player notice the Mutator is running with a welcome message


    Full name: Mutate Spec
    Date: August 1, 2013
    Compatibility: NOT TESTED (works in 2.1, could be lower)
    Size: ~ 209KB (+ 41KB) (105 KB for PS3)
    Comment: /
    Credits: FakeTruth (investigated his WebAdmin settings code)
    Coder: RattleSN4K3

    Screenshots:
    In-Game menu bar


    Config scene (PC screenshot)


    WebAdmin interface
    Normal Advanced WebAdmin interface (avialable with the full version):
    PS3
    Game start: Pressing START Indication for being switched:
    Demonstration:
     
    Spoiler


    Changelog:
    • v0.6
      • Fixed: Switching to spec while being dead caused being stuck in the dead state
      • Fixed: Swapped messages for delay join/spec
      • Fixed: Bots causing error entries in log
      • Fixed: Some bad behaviour with delay messages
      • Fixed: Proper behaviour for becomeactive (menu 'join')
      • Fixed: Multiple message were shown on trying to switch
      • Changed: Relevancy for client class
      • Added: New exec commands "becomeplayer" and "becomespectator"

    • v0.5
      • Fixed: Team switching with chat command was handled twice
      • Fixed: Restoring stats switched player to old team causing some problems
      • Added: "Loaded" message for clients (and also stored in demos)

    • v0.4
      • Fixed: Chain of LinkedReplicationInfo got broken
      • Fixed: Client crash when closing menu after switching tabs
      • Changed: Separate client package
      • Changed: Proper Menu hooking
      • Changed: Rewritten config scene

    • v0.3
      • Changed: Package flags are client optional now
      • Added: Chat commands
      • Added: Options to disable chat and mutate commands separately
      • Added: Compatible mode to disable mutate, chat and exec commands
      • Added: Localization file
      • Fixed: RestoreStats was not saved in Config UI
      • Fixed: UI integration not working when mutator was added with ServerTravel
      • Fixed: Duplicate players when RestoreStats is enabled

    • v0.2
      • Fixed: Clients messages shown on switching (with time)
      • Fixed: Crash on disconnecting out of the ingame menu
      • Fixed: Join command not working when delayed joining is active
      • Fixed: WebAdmin package got downloaded
      • Fixed: Saving config on WebAdmin settings did not stored the value of QueueTimeSpec
      • Fixed: minor bugs
      • Added: UIScene Config menu
      • Added: Option to restore stats on switching to spec



    Download:

    Read the Readme file for more information.



    Older versions:
    PC

    PS3




    I would like to get some feedback of the PS3 version. I couldn't test that version.
    Feel free to report bugs for both versions.

    #2
    Very cool! with a w/WebAdmin on top of it. - I'd put something like this under my preferred mutator list along with spectatebots, ultrainstagib, etc.

    I have UT3 on the PS3 but I haven't installed any custom content (I use a PC for UT3 and most gaming for that matter) but if no one else who's more familiar with PS3 comes along I'll keep an eye on this and and see what I can do. Is Eureplayer23 still around?

    Comment


      #3
      untested ps3 content can "occassionally" result it a total ps3 fail/ resulting in entire mod collections needing to be removed.
      - i can test it before others - to avoid other ps3 users getting frustrated in the event of the aforementioned "occassional" errors [if any].
      * i will report back if i ever get time - later tonight - or - tomoro maybe

      p.s. i would feel better jsut cooking it myself and then testing it on my ps3- got original src links?

      Comment


        #4
        The PS3 version doesn't work. Cooked incorrectly, does not appear under "installed content" after you attempt to install. It looks like the ini was incorrect. The PS3 can't be config using an ini at all. Its not part of the PS3 code to read extra stuff. The custom menus will not work either.

        This is what the ini should look like to get it to load properly (in the installed screen) without knowing if it actually works or anything. Everything else must be deleted.

        [MutateSpec UTUIDataProvider_Mutator]
        ClassName=MutateSpec.MSMutator
        FriendlyName=Mutate Spec
        Description=Lets you switch from an active player back to spectator-mode
        GroupNames=
        bRemoveOn360=False
        bRemoveOnPC=False
        bRemoveOnPS3=False

        [LoadForAllGameTypes]
        Package=MutateSpec

        Comment


          #5
          @1XTreme: Thanks for the kinds words.

          @TKBS: I think the Normal version has everything you need to recook the mutator for the PS3.

          @euchreplayer23:
          My ini looks like this (except there is the additional config section).
          Besides that, the 0.1 version does not feature a custom menu. It hooks the original one (but it resulted into a crash due to not having garbage collected everything i added).

          Did you get the mutator to appear in the "installed content" after attempting installing after you fixed the ini?

          Can you summarize everyting i need to focus on while cooking for PS3. I thought i did everything correct. ( i was reading a lot about PS3 content cooking).

          A question: Does this mutator have a config UIScene?
          http://forums.epicgames.com/threads/...-Pics-Download





          I updated the version. There were some problems (like UT3 crashed on disconnecting).
          There are some new features.

          New features:
          • PC/PS3 Configurable via UI scene
          • Optionally: Restoring stats on switching back to spectator



          Changelog:
          • Fixed: Clients messages shown on switching (with time)
          • Fixed: Crash on disconnecting out of the ingame menu
          • Fixed: Join command not working when delayed joining is active
          • Fixed: WebAdmin package got downloaded
          • Fixed: Saving config on WebAdmin settings did not stored the value of QueueTimeSpec
          • Fixed: minor bugs
          • Added: UIScene Config menu
          • Added: Option to restore stats on switching to spec

          Comment


            #6
            Originally posted by RattleSN4K3 View Post
            @euchreplayer23:
            My ini looks like this (except there is the additional config section).
            Besides that, the 0.1 version does not feature a custom menu. It hooks the original one (but it resulted into a crash due to not having garbage collected everything i added). Did you get the mutator to appear in the "installed content" after attempting installing after you fixed the ini? Can you summarize everyting i need to focus on while cooking for PS3. I thought i did everything correct. ( i was reading a lot about PS3 content cooking). A question: Does this mutator have a config UIScene?
            http://forums.epicgames.com/threads/...-Pics-Download
            Config scene (PC screenshot) this pops up now in the config section for V2. Without the config options in the ini. The stuff out there for PS3 cooking is hard to follow or incorrect (I will try to help along).
            This SpeedX V2
            http://forums.epicgames.com/threads/...-Pics-Download
            never work properly on the PS3. At least not for me. Version 1 did work if anyone has that version. I will pay in thx u's, if any one has it (PC or PS3 version). The config screen does load though in this mod.

            (I test using a PS3 controller) Your mut config screen pops up like I said, but selecting "defaults" causes a crash/freeze (Pressing L2 for defaults and then "x" for accept). When in the config screen cursor stuck in menu going up or down. The "accept" key is the "x" key in PS3 there is no mouse cursor to select "accept", so you can change the check boxes but can't accept anything. Its hard to explain. Anyways... selecting no config options at all or even going into the config screen: Once you start a map in any GT the red loading screen freezes the system. I will get a USB mouse to confirm that doesn't work as well although that will not affect map loading.

            Comment


              #7
              Thanks for the explanation, euchreplayer23. It looks like the config part is causing a crash.

              On the base of v0.2 i created a PS3-only version (it would work on PC tho but i don't release it for PC as it does not differ in functionality).
              You should now able to accept the settings in the config scene with either START or SELECT. You can enter text values for the editbox while focus the textfield and pressing 1 button (i don't know which one it will result on the PS3 version, but it would be the [X] and the [Y] button on the XBOX360 controller (probably SQUARE and TRIANGLE on the PS3 controller)). A input screen of the PS3 should pop up.

              For now, i disabled the interaction with the ingame menu. So this mutator won't do anything at all.

              Can you just run the mutator and report back if the mutator is working?
              Is the config scene still crashing the console?
              Are the buttons on the config scene labeled with the appropriate button symbol the user has to press? What button is shown for "defaults", and what button for "Accept" and "Keyboard"?

              Download:
              MutateSpecPS3 v0.1b Dev1
              http://www.mediafire.com/file/y7tdsr...v0.1b_Dev1.zip

              Comment


                #8
                Originally posted by RattleSN4K3 View Post
                You should now able to accept the settings in the config scene with either START or SELECT. You can enter text values for the editbox while focus the textfield and pressing 1 button (i don't know which one it will result on the PS3 version, but it would be the [X] and the [Y] button on the XBOX360 controller (probably SQUARE and TRIANGLE on the PS3 controller)). Can you just run the mutator and report back if the mutator is working? Is the config scene still crashing the console? Are the buttons on the config scene labeled with the appropriate button symbol the user has to press? What button is shown for "defaults", and what button for "Accept" and "Keyboard"?
                L2=Defaults works (but press X again to accept crashes), X=Accept does nothing previous post, []=Keyboard also works properly. The mutator does nothing in game, pressing any/all buttons doesn't bring up spectator mode (did you make a spectate button, like a previous spectate version?). On the config screen side the start button works as a box saying config saved pops up (unsure if it actually did save though, not able to test out). Keyboard button works out as described as well when highlighting number boxes.

                How did you link "start" to save config? I would like to fix the Speed mutator and some of the other config muts out there. Especially getting a config vehicle replacement working would be great.

                Relics
                Speed/Gravity
                Vehicle
                Weapons (with Biorifle and Avril selectable).

                Comment


                  #9
                  So "MutateSpecPS3 v0.1b Dev1" is only crashign when resetting to defaults?
                  So X is shown for the button "Accept". I can't change that.
                  You're toggling the checkboxes with X as well, right?

                  The PS3-v0.1b-Dev1 version is not doing anything in game. Correct. I disabled some parts to determine if the specific parts are causing a crash or not.




                  New version. Resetting the config is different now, so it could not result into a crash. The ingame part is enabled. In order to switch to Spectator, you need to open the ingame menu (by pressing START or Escape on a keyboard). The new button "Spectate" should be visible.

                  Download
                  MutateSpecPS3 v0.1b Dev2
                  http://www.mediafire.com/file/hmg33q...v0.1b_Dev2.zip



                  Originally posted by euchreplayer23 View Post
                  L2=Defaults works (but press X again to accept crashes), X=Accept does nothing previous post, []=Keyboard also works
                  How did you link "start" to save config?
                  I'll explain it if everything is fixed.

                  Comment


                    #10
                    Originally posted by RattleSN4K3 View Post
                    So "MutateSpecPS3 v0.1b Dev1" is only crashign when resetting to defaults?
                    So X is shown for the button "Accept". I can't change that. You're toggling the checkboxes with X as well, right?
                    New version. Resetting the config is different now, so it could not result into a crash. The ingame part is enabled. In order to switch to Spectator, you need to open the ingame menu (by pressing START or Escape on a keyboard). The new button "Spectate" should be visible. I'll explain it if everything is fixed.
                    The crash when resetting defaults is fixed. Toggling checkboxes with X is correct (X performs no other function). Maps load with mutator, b4 actual game starts pressing start brings up menu screen, no spectate button is visible. Exit start screen, press fire1 to start actual game. Bots/player loads fine, pressing start again causes crash/freeze.

                    Please explain even if everything doesn't get fixed.

                    Comment


                      #11
                      Ah okay. Really stressful to find the orgin of the crash. I don't really know where to start -.-.
                      Here are 2 new versions. Both don't add the spectate button. But it's important for me, if they working or not.

                      The config scene is untouched. No need to check that.

                      Download
                      MutateSpecPS3 v0.1b Dev3 - http://www.mediafire.com/file/6ywt56...v0.1b_Dev3.zip
                      MutateSpecPS3 v0.1b Dev4 - http://www.mediafire.com/file/kx5mb7...v0.1b_Dev4.zip




                      There is no magic in saving the config. Let's take a look at the config scene for the mutator "UTMutator_WeaponReplacement".
                      This is "UTUIFrontEnd_WeaponReplacementMenu". The important function to apply saving, cancelling and restoring is the following function
                      Code:
                      function bool HandleInputKey( const out InputEventParameters EventParms );
                      This function is used at default for a subclass of "UTUIFrontEnd".
                      Code:
                      OnRawInputKey=HandleInputKey
                      Every time a user presses a button, this method is executed.

                      The original method of the Weapon Replacment is this.
                      Code:
                      function bool HandleInputKey( const out InputEventParameters EventParms )
                      {
                          local bool bResult;
                      
                          bResult=false;
                      
                          if(EventParms.EventType==IE_Released)
                          {
                              if(EventParms.InputKeyName=='XboxTypeS_B' || EventParms.InputKeyName=='Escape')
                              {
                                  OnBack();
                                  bResult=true;
                              }
                          }
                      
                          return bResult;
                      }
                      You should notice the two buttons "XboxTypeS_B" and "Escape".
                      If one of these buttons is released, it will trigger the "OnBack" method, which will close the scene without saving.
                      But there is this method "OnAccept" which will close the scene and save the config.

                      So how does the PS3 notice the X button for accepting the settings?
                      Well, the options of the weapon replacment scene is populated dynamically. There is this element "OptionList" (type of UTUIOptionList). Whenever a sub-element of this OptionList is focussed and the the Acceptkey is pressed, that OptionList will call its delegate OnAcceptOptions
                      Code:
                      class UTUIOptionList extends UTDrawPanel
                      ...
                      
                      /** Accept button was pressed on the option list. */
                      delegate OnAcceptOptions(UIScreenObject InObject, int PlayerIndex);
                      This delegate is set to the function OnAcceptOptions of the "UTUIFrontEnd_WeaponReplacementMenu" class.
                      Code:
                      class UTUIFrontEnd_WeaponReplacementMenu extends UTUIFrontEnd
                      ...
                      
                      /** Callback for when the option list is accepted. */
                      function OnAcceptOptions(UIScreenObject InObj, int PlayerIndex)
                      {
                          OnAccept();
                      }
                      You see, the "OnAccept" is called on accepting options. This method is saving the settings.

                      So, what are these accept keys and how does the PS3 is triggering code on pressing these?
                      If you take a look at the class "UTUIOptionList" you'll notice the following method, which will handle every input.
                      Code:
                      function bool ProcessInputKey( const out SubscribedInputEventParameters EventParms )
                      
                      ...
                          else if ( EventParms.EventType == IE_Released )
                          {
                              if ( EventParms.InputAliasName == 'AcceptOptions' )
                              {
                                  PlayUISound('ListSubmit');
                                  OnAcceptOptions(self, EventParms.PlayerIndex);
                              }
                      And there you can see, a option list is accepting 'AcceptOptions'. This aliasname is defined in the input ini (in this case "PS3Input.ini").
                      Code:
                      InputAliasName="AcceptOptions",LinkedInputKeys=((InputKeyName="Enter"),(InputKeyName="XboxTypeS_A"))
                      Another thing, you'll notice is the line "OnAcceptOptions(self, EventParms.PlayerIndex);". It will call the function which is linked to this delegate.
                      ("OnAcceptOptions(...)" of the mutator config scene).

                      So, now we know how the config scenes of the stock mutators are saved and the buttons are processed on the PS3.
                      Now, let me explain what i did. My config UIScene is made from static elements. Every element you see, is added on design time (in the UT3 editor). Every element has a unique name. My underlaying code binds these elemente to variables. In that case, i'm able to get values of the specific elements.
                      I used the checkboxes. These can be toggled with the X-Button (Enter/Space for PC). As you said, the PS3 player cannot click the buttons of the buttonbar, you'll have to process the inputs on a different place.

                      With the explanation above, you should know what to do now. The magic is to have another code part at the HandleInputKey.
                      The following code is the a example code for having a code which will call some methods when a specific button is pressed.

                      Code:
                      function bool HandleInputKey( const out InputEventParameters EventParms )
                      {
                          local bool bResult;
                      
                          bResult=false;
                      
                          if(EventParms.EventType==IE_Released)
                          {
                              if(EventParms.InputKeyName=='XboxTypeS_Back' || EventParms.InputKeyName=='XboxTypeS_Start')
                              {
                                  OnAccept();
                                  bResult=true;
                              }
                              if(EventParms.InputKeyName=='XboxTypeS_B' || EventParms.InputKeyName=='Escape')
                              {
                                  OnBack();
                                  bResult=true;
                              }
                              else if(EventParms.InputKeyName=='XboxTypeS_LeftTrigger')
                              {
                                  OnResetToDefaults();
                                  bResult=true;
                              }
                          }
                      
                          return bResult;
                      }
                      The buttons are added dynamically.
                      Code:
                      /** Sets up the scene's button bar. */
                      function SetupButtonBar()
                      {
                          ButtonBar.Clear();
                          ButtonBar.AppendButton("<Strings:UTGameUI.ButtonCallouts.Back>", OnButtonBar_Back);
                          ButtonBar.AppendButton("<Strings:UTGameUI.ButtonCallouts.Accept>", OnButtonBar_Accept);
                          ButtonBar.AppendButton("<Strings:UTGameUI.ButtonCallouts.ResetToDefaults>", OnButtonBar_ResetToDefaults);
                      }
                      It looks like the order is important. So the 1st button will always have the CIRCLE symbol and the 2nd the X symbol.

                      Let's create an example mutator.
                      Code:
                      class Configurable_NoHoverboard_Mutator extends UTMutator
                          config(Configurable_NoHoverboard);
                      
                      var config bool bAllowHoverboard;
                      
                      function InitMutator(string Options, out string ErrorMessage)
                      {
                          if ( UTGame(WorldInfo.Game) != None )
                          {
                              UTGame(WorldInfo.Game).bAllowHoverboard = bAllowHoverboard;
                          }
                          Super.InitMutator(Options, ErrorMessage);
                      }
                      
                      // hardcoded reset method
                      static function StaticResetConfig()
                      {    
                          class'Configurable_NoHoverboard_Mutator'.default.bAllowHoverboard = false;
                      }
                      
                      defaultproperties
                      {
                          GroupNames[0]="HOVERBOARD"
                      
                          bAllowHoverboard=false
                      }
                      A config scene could look like this.
                      Code:
                      class Configurable_NoHoverboard_Frontend extends UTUIFrontEnd
                          dependson(Configurable_NoHoverboard_Mutator);
                      
                      /** Reference to the messagebox scene. */
                      var transient UTUIScene_MessageBox MessageBoxReference;
                      
                      var localized string TitleString;
                      var localized string ConsoleInfoString;
                      var localized string ConfigSavedString;
                      
                      var transient UILabel ConsoleInfoLabel;
                      
                      var transient UICheckbox CheckAllowHoverboard;
                      
                      event PostInitialize()
                      {
                          super.PostInitialize();
                          
                          AdjustSkin();
                      
                          ConsoleInfoLabel = UILabel(FindChild('lblConsoleInfo', true));
                      
                          CheckAllowHoverboard = UICheckbox(FindChild('chkAllowHoverboard', true));
                      }
                      
                      
                      /** Sets the title for this scene. */
                      function SetTitle()
                      {
                          //local string FinalStr;
                          local UILabel TitleLabel;
                      
                          TitleLabel = GetTitleLabel();
                          if ( TitleLabel != None )
                          {
                              if(TabControl == None)
                              {
                                  //FinalStr = Caps(Localize("Titles", string(SceneTag), "UTGameUI"));
                                  TitleLabel.SetDataStoreBinding(TitleString);
                              }
                              else
                              {
                                  TitleLabel.SetDataStoreBinding("");
                              }
                          }
                      }
                      
                      /** Scene activated event, sets up the title for the scene. */
                      event SceneActivated(bool bInitialActivation)
                      {
                          Super.SceneActivated(bInitialActivation);
                      
                          UpdateCaptions();
                          ConfigToUI();
                      }
                      
                      function UpdateCaptions()
                      {
                          if (ConsoleInfoLabel != none)
                              ConsoleInfoLabel.SetValue(ConsoleInfoString);
                      }
                      
                      function ConfigToUI()
                      {
                          if (CheckAllowHoverboard != none) CheckAllowHoverboard.SetValue(class'Configurable_NoHoverboard_Mutator'.default.bAllowHoverboard);
                      }
                      
                      function UIToConfig()
                      {
                          if (CheckAllowHoverboard != none) class'Configurable_NoHoverboard_Mutator'.default.bAllowHoverboard = CheckAllowHoverboard.IsChecked();
                      
                          class'Configurable_NoHoverboard_Mutator'.static.StaticSaveConfig();
                      }
                      
                      function AdjustSkin()
                      {
                          local UISkin Skin;
                      
                          // make sure we're using the right skin
                          Skin = UISkin(DynamicLoadObject("UI_Skin_Derived.UTDerivedSkin",class'UISkin'));
                          if ( Skin != none )
                          {
                              SceneClient.ChangeActiveSkin(Skin);
                          }
                      }
                      
                      /** Sets up the scene's button bar. */
                      function SetupButtonBar()
                      {
                          ButtonBar.Clear();
                          ButtonBar.AppendButton("<Strings:UTGameUI.ButtonCallouts.Back>", OnButtonBar_Back);
                          ButtonBar.AppendButton("<Strings:UTGameUI.ButtonCallouts.Accept>", OnButtonBar_Accept);
                          ButtonBar.AppendButton("<Strings:UTGameUI.ButtonCallouts.ResetToDefaults>", OnButtonBar_ResetToDefaults);
                      }
                      
                      /** Reset to defaults callback. */
                      function OnResetToDefaults()
                      {
                          local array<string> MessageBoxOptions;
                      
                          MessageBoxReference = GetMessageBoxScene();
                      
                          if(MessageBoxReference != none)
                          {
                              MessageBoxOptions.AddItem("<Strings:UTGameUI.ButtonCallouts.ResetToDefaultAccept>");
                              MessageBoxOptions.AddItem("<Strings:UTGameUI.ButtonCallouts.Cancel>");
                      
                              MessageBoxReference.SetPotentialOptions(MessageBoxOptions);
                              MessageBoxReference.Display("<Strings:UTGameUI.MessageBox.ResetToDefaults_Message>", "<Strings:UTGameUI.MessageBox.ResetToDefaults_Title>", OnResetToDefaults_Confirm, 1);
                          }
                      }
                      
                      /**
                       * Callback for the reset to defaults confirmation dialog box.
                       *
                       * @param SelectionIdx    Selected item
                       * @param PlayerIndex    Index of player that performed the action.
                       */
                      function OnResetToDefaults_Confirm(UTUIScene_MessageBox MessageBox, int SelectionIdx, int PlayerIndex)
                      {
                          if(SelectionIdx==0)
                          {
                              `log("Reseting to defaults, wabam!",,'MutateSpec');
                              
                              ResetToDefaults();
                      
                              // Display toast
                              class'UTUIScene'.static.ShowOnlineToast(ConfigSavedString);
                      
                              ConfigToUI();
                      
                              // Close scene after resetting?
                              //CloseScene(self);
                          }
                          else
                          {
                              CheckAllowHoverboard.SetFocus(none);
                          }
                      }
                      
                      /** Callback for when the user wants to back out of this screen. */
                      function OnBack()
                      {
                          CloseScene(self);
                      }
                      
                      /** Callback for when the user accepts the changes. */
                      function OnAccept()
                      {
                          UIToConfig();
                      
                          // Display toast
                          class'UTUIScene'.static.ShowOnlineToast(ConfigSavedString);
                      
                          CloseScene(self);
                      }
                      
                      // 
                      // ---=== Buttonbar Callbacks ===---
                      //
                      
                      /** Buttonbar Callback. */
                      function bool OnButtonBar_ResetToDefaults(UIScreenObject InButton, int InPlayerIndex)
                      {
                          OnResetToDefaults();
                      
                          return true;
                      }
                      
                      /** Buttonbar Callback. */
                      function bool OnButtonBar_Back(UIScreenObject InButton, int InPlayerIndex)
                      {
                          OnBack();
                      
                          return true;
                      }
                      
                      /** Buttonbar Callback. */
                      function bool OnButtonBar_Accept(UIScreenObject InButton, int InPlayerIndex)
                      {
                          OnAccept();
                      
                          return true;
                      }
                      
                      /**
                       * Provides a hook for unrealscript to respond to input using actual input key names (i.e. Left, Tab, etc.)
                       *
                       * Called when an input key event is received which this widget responds to and is in the correct state to process.  The
                       * keys and states widgets receive input for is managed through the UI editor's key binding dialog (F8).
                       *
                       * This delegate is called BEFORE kismet is given a chance to process the input.
                       *
                       * @param    EventParms    information about the input event.
                       *
                       * @return    TRUE to indicate that this input key was processed; no further processing will occur on this input key event.
                       */
                      function bool HandleInputKey( const out InputEventParameters EventParms )
                      {
                          local bool bResult;
                      
                          bResult=false;
                      
                          if(EventParms.EventType==IE_Released)
                          {
                              if(EventParms.InputKeyName=='XboxTypeS_Back' || EventParms.InputKeyName=='XboxTypeS_Start')
                              {
                                  OnAccept();
                                  bResult=true;
                              }
                              if(EventParms.InputKeyName=='XboxTypeS_B' || EventParms.InputKeyName=='Escape')
                              {
                                  OnBack();
                                  bResult=true;
                              }
                              else if(EventParms.InputKeyName=='XboxTypeS_LeftTrigger')
                              {
                                  OnResetToDefaults();
                                  bResult=true;
                              }
                          }
                      
                          return bResult;
                      }
                      
                      function ResetToDefaults()
                      {
                          // This is causing a crash for PS3
                          //class'Configurable_NoHoverboard_Mutator'.static.StaticClearConfig();
                      
                          class'Configurable_NoHoverboard_Mutator'.static.StaticResetConfig();
                          class'Configurable_NoHoverboard_Mutator'.static.StaticSaveConfig();
                      }
                      
                      defaultproperties
                      {
                          ConfigSavedString="Config saved!"
                          TitleString="Mutate Spec"
                          ConsoleInfoString="Info: Use the START button to accept options and save it to config."
                      }
                      Create the source files and compile it.
                      For now, just just need to create a UIScene on the base template of "Configurable_NoHoverboard_Frontend" (you need to load the mutator code package to get that template).
                      I created a package called "UI_Scenes_NoHoverboard" which has under the group "Frontend" a UIScene called "Config". The full path of the UIScene:
                      Code:
                      UI_Scenes_NoHoverboard.Frontend.Config
                      This path is need for the ini file.

                      The cooking part is important. Since the Unreal-File-System is different on console (due to memory consumption) the files does not get loaded by default.
                      Check http://udn.epicgames.com/Three/PS3Mods.html under "Miscellaneous info". So we need to add the specific parts to the ini file before packaging.
                      Cookd the mod like normal, wait for the dialog with the link to your files and add/replace the following part to the ini:

                      Code:
                      [LoadForAllGameTypes]
                      Package=Configurable_NoHoverboard
                      Package=UI_Scenes_NoHoverboard
                      
                      [Engine.PackagesToFullyLoadForDLC]
                      MapName=UTFrontend
                      Package=Configurable_NoHoverboard
                      Package=UI_Scenes_NoHoverboard
                      This will force the PS3 to load both packages "Configurable_NoHoverboard" and "UI_Scenes_NoHoverboard" when the frontend is loaded.
                      After packaging and installing the mutator onto the console, you should be able to open the config scene, change the value and start a game (preferable VCTF or Warfare with hoverboard support).

                      Here is the package containing the example mutator, uncooked packages and everything else.
                      http://www.mediafire.com/?2zje13fra0s5nng


                      With this knowledge, you should be able to add a config scene for the Vehicle replacment mutator for the PS3.

                      Comment


                        #12
                        The no hoverboard config mutator doesn't work. You have the hoverboard when you just select the mutator and nothing else. Also you have the mutator when you check the box in the config and save/start. Either way hoverboard appears. No crashes though.

                        Dev3 loads fine/configscreen is also working, does nothing weird in game, no spectate button.
                        Dev4 loads fine/configscreen is also working, freezes @start.

                        I noticed on the config weapons mutator that "config saved" does not pop up when you press accept. Your above versions for hover/spectator do. I don't think anything is actually being saved or just in general not doing the correct thing.

                        Anyways, I have to go through your steps above to understand better whats going on. A little confused as to why even the simple one is not working.

                        Comment


                          #13
                          Originally posted by euchreplayer23 View Post
                          The no hoverboard config mutator doesn't work. You have the hoverboard when you just select the mutator and nothing else.
                          [...]
                          I noticed on the config weapons mutator that "config saved" does not pop up when you press accept. Your above versions for hover/spectator do. I don't think anything is actually being saved or just in general not doing the correct thing.
                          "Config saved" is a toast which i added. The stock mutator doesn't feature that saving notice.

                          It looks like the InitMutator method is never called.
                          Might use a timer to make sure the game is initialized. Like this code
                          Code:
                          class Configurable_NoHoverboard_Mutator extends UTMutator
                              config(Configurable_NoHoverboard);
                          
                          var config bool bAllowHoverboard;
                          
                          function PostBeginPlay()
                          {
                              super.PostBeginPlay();
                              AddTimer();
                          }
                          
                          function InitMutator(string Options, out string ErrorMessage)
                          {
                              Super.InitMutator(Options, ErrorMessage);
                              AddTimer();
                          }
                          
                          function AddTimer()
                          {
                              if (!IsTimerActive('AddTimer'))
                                  SetTimer(0.1, true, 'AddTimer');
                              
                              if ( UTGame(WorldInfo.Game) == None )
                                  return;
                          
                              ClearTimer('AddTimer');
                              ApplySettings();
                          }
                          
                          function ApplySettings()
                          {
                              if ( UTGame(WorldInfo.Game) != None )
                              {
                                  UTGame(WorldInfo.Game).bAllowHoverboard = bAllowHoverboard;
                              }
                          }
                          
                          // hardcoded reset method
                          static function StaticResetConfig()
                          {    
                              class'Configurable_NoHoverboard_Mutator'.default.bAllowHoverboard = false;
                          }
                          
                          defaultproperties
                          {
                              GroupNames[0]="HOVERBOARD"
                              bAllowHoverboard=false
                          }



                          Originally posted by euchreplayer23 View Post
                          Dev3 loads fine/configscreen is also working, does nothing weird in game, no spectate button.
                          Dev4 loads fine/configscreen is also working, freezes @start.
                          Thanks for testing.

                          Now i got my last version.
                          If this new version isn't working i will drop the UI integration for PS3 -.-. Trying a different approach then.
                          Can you check this version. Only ingame code is changed.

                          v0.1b Dev 5
                          http://www.mediafire.com/file/fo9bmq...v0.1b_Dev5.zip

                          Comment


                            #14
                            v0.1b Dev 5 doesn't work. Doesn't unpack properly, freezes during the unpacking @99%. Can't otherwise test it.

                            Inserted your new mutator code and recompiled your no-hoverboard mut. Installed but did nothing in game. Didn't take away h-b in VCTF/war and didn't add them(using config) in DM.

                            Thank you for the efforts.

                            Comment


                              #15
                              being able to switch from Spectator to Player or vice-versa sure would be handy for online gameplay... is MutateSpec going to include server version?

                              Comment

                              Working...
                              X