Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- =begin
- #==============================================================================
- ** Large Choices
- Author: Tsukihime
- Date: Dec 6, 2012
- ------------------------------------------------------------------------------
- ** Change log
- Dec 7, 2012
- - implemented proper branch canceling
- Dec 6, 2012
- - Initial release
- ------------------------------------------------------------------------------
- ** Terms of Use
- * Free to use in commercial/non-commercial projects
- * No real support. The script is provided as-is
- * Will do bug fixes, but no compatibility patches
- * Features may be requested but no guarantees, especially if it is non-trivial
- * Preserve this header
- ------------------------------------------------------------------------------
- ** Description
- This script combines groups of "show choice" options together as one large
- command. This allows you to create more than 4 choices by simply creating
- several "show choice" commands.
- ------------------------------------------------------------------------------
- ** Usage
- Add a show choice command.
- If you want more choices, add another one, and fill it out as usual.
- Note that you should only specify one cancel choice (if you specify more than
- one, then the last one is taken).
- For "branch" canceling, note that *all* cancel branches are executed.
- You should only have a cancel branch on the last set of choices
- #==============================================================================
- =end
- $imported = {} if $imported.nil?
- $imported["Tsuki_LargeChoices"] = true
- #==============================================================================
- # ** Configuration
- #==============================================================================
- module Tsuki
- module Large_Choices
- Code_Filter = [402, 403, 404]
- end
- end
- #==============================================================================
- # ** Rest of the script
- #==============================================================================
- class Game_Temp
- # temp solution to get this working
- attr_accessor :branch_choice
- def branch_choice
- @branch_choice || 5
- end
- end
- class Game_Interpreter
- #-----------------------------------------------------------------------------
- # Clean up
- #-----------------------------------------------------------------------------
- alias :th_large_choices_clear :clear
- def clear
- th_large_choices_clear
- @first_choice_cmd = nil
- @choice_search = 0
- end
- #-----------------------------------------------------------------------------
- # Prepare for more choices
- #-----------------------------------------------------------------------------
- alias :th_large_choices_setup_choices :setup_choices
- def setup_choices(params)
- # start with our original choices
- th_large_choices_setup_choices(params)
- # store our "first" choice in the sequence
- @first_choice_cmd = @list[@index]
- # reset branch choice
- $game_temp.branch_choice = @first_choice_cmd.parameters[1]
- # Start searching for more choices
- @num_choices = $game_message.choices.size
- @choice_search = @index + 1
- search_more_choices
- end
- #-----------------------------------------------------------------------------
- # New. Check whether the next command (after all branches) is another choice
- # command. If so, merge it with the first choice command.
- #-----------------------------------------------------------------------------
- def search_more_choices
- skip_choice_branches
- next_cmd = @list[@choice_search]
- # Next command isn't a "show choice" so we're done
- return if next_cmd.code != 102
- @choice_search += 1
- # Otherwise, push the choices into the first choice command to merge
- # the commands.
- @first_choice_cmd.parameters[0].concat(next_cmd.parameters[0])
- # Update all cases to reflect merged choices
- update_show_choices(next_cmd.parameters)
- update_cancel_choice(next_cmd.parameters)
- update_choice_numbers
- # delete the command to effectively merge the branches
- @list.delete(next_cmd)
- # Now search for more
- search_more_choices
- end
- #-----------------------------------------------------------------------------
- # New. Update the options for the first "show choice" command
- #-----------------------------------------------------------------------------
- def update_show_choices(params)
- params[0].each {|s| $game_message.choices.push(s) }
- end
- #-----------------------------------------------------------------------------
- # New. If cancel specified, update it to reflect merged choice numbers
- # The last one is taken if multiple cancel choices are specified
- #-----------------------------------------------------------------------------
- def update_cancel_choice(params)
- # disallow, just ignore
- return if params[1] == 0
- # branch on cancel
- return update_branch_choice if params[1] == 5
- # num_choices is not one-based
- cancel_choice = params[1] + (@num_choices - 1)
- # update cancel choice, as well as the first choice command
- $game_message.choice_cancel_type = cancel_choice
- @first_choice_cmd.parameters[1] = cancel_choice
- end
- #-----------------------------------------------------------------------------
- # New. Set the initial choice command to "branch cancel"
- #-----------------------------------------------------------------------------
- def update_branch_choice
- branch_choice = $game_message.choices.size + 1
- $game_message.choice_cancel_type = branch_choice
- $game_temp.branch_choice = branch_choice
- @first_choice_cmd.parameters[1] = branch_choice
- end
- def command_403
- p $game_temp.branch_choice - 1
- command_skip if @branch[@indent] != $game_temp.branch_choice - 1
- end
- #-----------------------------------------------------------------------------
- # New. For each branch, update it to reflect the merged choice numbers.
- #-----------------------------------------------------------------------------
- def update_choice_numbers
- i = @choice_search
- while Tsuki::Large_Choices::Code_Filter.include?(@list[i].code) || @list[i].indent != @indent
- if @list[i].code == 402
- @list[i].parameters[0] = @num_choices
- @num_choices += 1
- end
- i += 1
- end
- end
- #-----------------------------------------------------------------------------
- # New. Returns the next command after our choice branches
- #-----------------------------------------------------------------------------
- def skip_choice_branches
- # start search at the next command
- # skip all choice branch-related commands and any branches
- while Tsuki::Large_Choices::Code_Filter.include?(@list[@choice_search].code) || @list[@choice_search].indent != @indent
- @choice_search += 1
- end
- return @choice_search
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment