Envision, Create, Share

Welcome to HBGames, a leading amateur game development forum and Discord server. All are welcome, and amongst our ranks you will find experts in their field from all aspects of video game design and development.

Unlocks

I've been searching a while for a way to unlock things, but I can't really find what I'm searching for.
If you don't understand what I mean, here's an example:

     You start a new game, and after a while playing you complete a special side quest. After completing the sidequest you
     will be able to have all weapons after starting a new game.

     My idea was (to continue with this example) that after completing the special side quest a switch turns on, and if you
     start a new game the script checks if that switch is on; if it's on then I can give the player all weapons (with events).
     And if it's off nothing will happen.

so all I need this script to do is (if you need a script for this):
  • When you start a new game check if sertain switches are turned on in other save files.
  • And if these switches are turned on, then also turn them on in the new save file
  • And only do this at the beginning of a new game

EDIT:
It could be somthing like:
    If switch 001 is on in other savefile
      then turn on switch 001
      else do nothing
and that for several switches.


I hope anyone can help me with this, I don't think it would be that hard to do, but I'm not really a scripter.
For anyone who wants to help me, Thanx in advance.
 

boon

Sponsor

Hmm, you could do it with IF commands...
Let me see.
Code:
  if $game_switches[100] == true
do stuff
     end

But then the switches reset when the new game is started. :dead:

I'll see if there is a way without too much scripting.

Okay, place this near the start of scene title:
NAME = 100

Then try replace the part in command_newgame that says $game_switches = Game_Switches.new

With
Code:
  if $game_switches[NAME] == true
$game_switches = Game_Switches.new
$game_switches[NAME] = true
else
$game_switches = Game_Switches.new
     end

Just saying the switch is 100 for example.

Nevermind, it doesn't work.
 
Would you not have to load the switches/variable data from the save game and then replace the new ones?

I'm guessing you need something like this:

I did have a lot of coding, but noticed  it might not work, so I was going to post instructions on how to put them in, but I just put it together for you... I think.

This is all just me making it up as I went along, might work though.
So basically I think command_new_game should look like (unless you've edited before):
Code:
  #--------------------------------------------------------------------------
  # * Command: New Game
  #--------------------------------------------------------------------------
  def command_new_game
    # Play decision SE
    $game_system.se_play($data_system.decision_se)
    # Stop BGM
    Audio.bgm_stop
    # Reset frame count for measuring play time
    Graphics.frame_count = 0
    # - New Stuff Added Here - #
    for i in 0..3
      if FileTest.exist?("Save#{i+1}.rxdata")
        filename = "Save#{i+1}.rxdata"
      end
    end
    file = File.open(filename, "rb")
    # Make each type of game object
    $game_temp          = Game_Temp.new
    $game_system        = Game_System.new
    $game_switches      = Marshal.load(file) ### NEW
    $game_variables     = Marshal.load(file) ### NEW
    $game_self_switches = Game_SelfSwitches.new
    $game_screen        = Game_Screen.new
    $game_actors        = Game_Actors.new
    $game_party         = Game_Party.new
    $game_troop         = Game_Troop.new
    $game_map           = Game_Map.new
    $game_player        = Game_Player.new
    # Set up initial party
    $game_party.setup_starting_members
    # Set up initial map position
    $game_map.setup($data_system.start_map_id)
    # Move player to initial position
    $game_player.moveto($data_system.start_x, $data_system.start_y)
    # Refresh player
    $game_player.refresh
    # Run automatic change for BGM and BGS set with map
    $game_map.autoplay
    # Update map (run parallel process event)
    $game_map.update
    # Switch to map screen
    $scene = Scene_Map.new
  end


It might have some incorrect coding, I didn't check... Back-up your project before you try this, I haven't tried this and I haven't used XP in a while. But I hope it helps. Or gives a basis for someone to make it better.
 
it does set a few variables on 1 but they don't macht with another savefile. and it gives an error when I want to change a variable with a event.
but still thanx for trying!
 
Bumping

For the one who might want to give it a try;
Maybe it's possible to check if a certain switch is on in another savefile, and then put it on in the new savefile, but if the switch's off nothing happens.
 
khmp recently helped Boonzeet with something similar over at rgss/rgss2 support.
I took the code he gave Boonzeet and changed it a little bit, hardly, and put it into the Scene_Title script.
If you want it, replace your Scene_Title with this:

Code:
#==============================================================================
# ** Scene_Title
#------------------------------------------------------------------------------
#  This class performs title screen processing.
#==============================================================================

class Scene_Title
  #--------------------------------------------------------------------------
  # * Main Processing
  #--------------------------------------------------------------------------
  def main
    # If battle test
    if $BTEST
      battle_test
      return
    end
    # Load database
    $data_actors        = load_data("Data/Actors.rxdata")
    $data_classes       = load_data("Data/Classes.rxdata")
    $data_skills        = load_data("Data/Skills.rxdata")
    $data_items         = load_data("Data/Items.rxdata")
    $data_weapons       = load_data("Data/Weapons.rxdata")
    $data_armors        = load_data("Data/Armors.rxdata")
    $data_enemies       = load_data("Data/Enemies.rxdata")
    $data_troops        = load_data("Data/Troops.rxdata")
    $data_states        = load_data("Data/States.rxdata")
    $data_animations    = load_data("Data/Animations.rxdata")
    $data_tilesets      = load_data("Data/Tilesets.rxdata")
    $data_common_events = load_data("Data/CommonEvents.rxdata")
    $data_system        = load_data("Data/System.rxdata")
    # Make system object
    $game_system = Game_System.new
    # Make title graphic
    @sprite = Sprite.new
    @sprite.bitmap = RPG::Cache.title($data_system.title_name)
    # Make command window
    s1 = "New Game"
    s2 = "Continue"
    s3 = "Shutdown"
    @command_window = Window_Command.new(192, [s1, s2, s3])
    @command_window.back_opacity = 160
    @command_window.x = 320 - @command_window.width / 2
    @command_window.y = 288
    # Continue enabled determinant
    # Check if at least one save file exists
    # If enabled, make @continue_enabled true; if disabled, make it false
    @continue_enabled = false
    for i in 0..3
      if FileTest.exist?("Save#{i+1}.rxdata")
        @continue_enabled = true
      end
    end
    # If continue is enabled, move cursor to "Continue"
    # If disabled, display "Continue" text in gray
    if @continue_enabled
      @command_window.index = 1
    else
      @command_window.disable_item(1)
    end
    # Play title BGM
    $game_system.bgm_play($data_system.title_bgm)
    # Stop playing ME and BGS
    Audio.me_stop
    Audio.bgs_stop
    # Execute transition
    Graphics.transition
    # Main loop
    loop do
      # Update game screen
      Graphics.update
      # Update input information
      Input.update
      # Frame update
      update
      # Abort loop if screen is changed
      if $scene != self
        break
      end
    end
    # Prepare for transition
    Graphics.freeze
    # Dispose of command window
    @command_window.dispose
    # Dispose of title graphic
    @sprite.bitmap.dispose
    @sprite.dispose
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    # Update command window
    @command_window.update
    # If C button was pressed
    if Input.trigger?(Input::C)
      # Branch by command window cursor position
      case @command_window.index
      when 0  # New game
        command_new_game
      when 1  # Continue
        command_continue
      when 2  # Shutdown
        command_shutdown
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Command: New Game
  #--------------------------------------------------------------------------
  def command_new_game
    # Play decision SE
    $game_system.se_play($data_system.decision_se)
    # Stop BGM
    Audio.bgm_stop
    # Reset frame count for measuring play time
    Graphics.frame_count = 0
    # Make each type of game object
    $game_temp          = Game_Temp.new
    $game_system        = Game_System.new
    $game_switches      = Game_Switches.new
    $game_variables     = Game_Variables.new
    $game_self_switches = Game_SelfSwitches.new
    $game_screen        = Game_Screen.new
    $game_actors        = Game_Actors.new
    $game_party         = Game_Party.new
    $game_troop         = Game_Troop.new
    $game_map           = Game_Map.new
    $game_player        = Game_Player.new

    saves = Dir.glob('Save*.rxdata')
    # If we have one or more saves.
    if saves.size > 0
      saves.each do |save|
        # Open the save file
        file = File.open(save, "rb")

        # Load all the unnecessary stuff to get to the switches.
        characters = Marshal.load(file)
        frame_count = Marshal.load(file)
        game_system = Marshal.load(file)
        game_switches = Marshal.load(file)

        # Decide if we have found our switch active or not.
        if game_switches[1]
          $game_switches[1] = true
        end
        if game_switches[2]
          $game_switches[2] = true
        end
        file.close
      end
    end

    # Set up initial party
    $game_party.setup_starting_members
    # Set up initial map position
    $game_map.setup($data_system.start_map_id)
    # Move player to initial position
    $game_player.moveto($data_system.start_x, $data_system.start_y)
    # Refresh player
    $game_player.refresh
    # Run automatic change for BGM and BGS set with map
    $game_map.autoplay
    # Update map (run parallel process event)
    $game_map.update
    # Switch to map screen
    $scene = Scene_Map.new
  end
  #--------------------------------------------------------------------------
  # * Command: Continue
  #--------------------------------------------------------------------------
  def command_continue
    # If continue is disabled
    unless @continue_enabled
      # Play buzzer SE
      $game_system.se_play($data_system.buzzer_se)
      return
    end
    # Play decision SE
    $game_system.se_play($data_system.decision_se)
    # Switch to load screen
    $scene = Scene_Load.new
  end
  #--------------------------------------------------------------------------
  # * Command: Shutdown
  #--------------------------------------------------------------------------
  def command_shutdown
    # Play decision SE
    $game_system.se_play($data_system.decision_se)
    # Fade out BGM, BGS, and ME
    Audio.bgm_fade(800)
    Audio.bgs_fade(800)
    Audio.me_fade(800)
    # Shutdown
    $scene = nil
  end
  #--------------------------------------------------------------------------
  # * Battle Test
  #--------------------------------------------------------------------------
  def battle_test
    # Load database (for battle test)
    $data_actors        = load_data("Data/BT_Actors.rxdata")
    $data_classes       = load_data("Data/BT_Classes.rxdata")
    $data_skills        = load_data("Data/BT_Skills.rxdata")
    $data_items         = load_data("Data/BT_Items.rxdata")
    $data_weapons       = load_data("Data/BT_Weapons.rxdata")
    $data_armors        = load_data("Data/BT_Armors.rxdata")
    $data_enemies       = load_data("Data/BT_Enemies.rxdata")
    $data_troops        = load_data("Data/BT_Troops.rxdata")
    $data_states        = load_data("Data/BT_States.rxdata")
    $data_animations    = load_data("Data/BT_Animations.rxdata")
    $data_tilesets      = load_data("Data/BT_Tilesets.rxdata")
    $data_common_events = load_data("Data/BT_CommonEvents.rxdata")
    $data_system        = load_data("Data/BT_System.rxdata")
    # Reset frame count for measuring play time
    Graphics.frame_count = 0
    # Make each game object
    $game_temp          = Game_Temp.new
    $game_system        = Game_System.new
    $game_switches      = Game_Switches.new
    $game_variables     = Game_Variables.new
    $game_self_switches = Game_SelfSwitches.new
    $game_screen        = Game_Screen.new
    $game_actors        = Game_Actors.new
    $game_party         = Game_Party.new
    $game_troop         = Game_Troop.new
    $game_map           = Game_Map.new
    $game_player        = Game_Player.new
    # Set up party for battle test
    $game_party.setup_battle_test_members
    # Set troop ID, can escape flag, and battleback
    $game_temp.battle_troop_id = $data_system.test_troop_id
    $game_temp.battle_can_escape = true
    $game_map.battleback_name = $data_system.battleback_name
    # Play battle start SE
    $game_system.se_play($data_system.battle_start_se)
    # Play battle BGM
    $game_system.bgm_play($game_system.battle_bgm)
    # Switch to battle screen
    $scene = Scene_Battle.new
  end
end

You should look at lines 144-149.
If you want to add another switch, put this under line 149:
Code:
if game_switches[id]
  $game_switches[id] = true
end

And replace "id" with the id of the switch you want to check for and turn on if it has been turned on on another save.
And credits goes to khmp for this one :thumb:

Over and out - Gando

Edit: Just saw that Boonzeet posted in this topic too, maybe he started the other topic to find out how to do this to help you.
       If that's the case, sorry for stealing your thunder Boonzeet :tongue: ^^
 

Thank you for viewing

HBGames is a leading amateur video game development forum and Discord server open to all ability levels. Feel free to have a nosey around!

Discord

Join our growing and active Discord server to discuss all aspects of game making in a relaxed environment. Join Us

Content

  • Our Games
  • Games in Development
  • Emoji by Twemoji.
    Top