Files
infinitefusion-e18/Data/Scripts/050_AddOns/GuessPokemonQuiz.rb

241 lines
7.3 KiB
Ruby

class FusionQuiz
#
# Possible difficulties:
#
# :REGULAR -> 4 options choice
#
# :ADVANCED -> List of all pokemon
#
def initialize(difficulty = :REGULAR)
@sprites = {}
@previewwindow=nil
@difficulty = difficulty
@customs_list = getCustomSpeciesList(true, false)
@selected_pokemon = nil
@head_id = nil
@body_id = nil
@choices = []
@abandonned=false
@score = 0
end
def start_quiz(nb_rounds=3)
round_multiplier = 1
round_multiplier_increase = 0.1
for i in 1..nb_rounds
if i == nb_rounds
pbMessage(_INTL("Get ready! Here comes the final round!"))
elsif i ==1
pbMessage(_INTL("Get ready! Here comes the first round!"))
else
pbMessage(_INTL("Get ready! Here comes round {1}!",i))
end
start_quiz_new_round(round_multiplier)
rounds_left = nb_rounds-i
if rounds_left >0
pbMessage(_INTL("That's it for round {1}. You've cumulated {2} points so far.",i,@score))
prompt_next_round = pbMessage(_INTL("Are you ready to move on to the next round?",i),["Yes","No"])
if prompt_next_round != 0
prompt_quit = pbMessage(_INTL("You still have {1} rounds to go. You'll only keep your points if you finish all {2} rounds. Do you really want to quit now?",rounds_left,nb_rounds),["Yes","No"])
if prompt_quit
@abandonned=true
return
end
end
round_multiplier += round_multiplier_increase
else
pbMessage(_INTL("That concludes our quiz! You've cumulated {1} points in total.",@score))
pbMessage("Thanks for playing with us today!")
end
end
end
def start_quiz_new_round(round_multiplier=1)
if @difficulty == :ADVANCED
base_points_q1=500
base_points_q1_redemption=200
base_points_q2=600
base_points_q2_redemption=200
else
base_points_q1=300
base_points_q1_redemption=100
base_points_q2=400
base_points_q2_redemption=100
end
pick_random_pokemon()
show_fusion_picture(true)
correct_answers=[]
#OBSCURED
correct_answers << new_question(base_points_q1*round_multiplier, "Which Pokémon is this fusion's body?",@body_id,true,true )
pbMessage("Next question!")
correct_answers << new_question(base_points_q2*round_multiplier,"Which Pokémon is this fusion's head?", @head_id,true,true )
show_fusion_picture(false )
#NON-OBSCURED
if !correct_answers[0] || !correct_answers[1]
pbMessage("Okay, now's your chance to make up for the points you missed!")
if !correct_answers[0] #1st question redemption
new_question(base_points_q1_redemption, "Which Pokémon is this fusion's body?",@body_id,true,false )
if !correct_answers[1]
pbMessage("Next question!")
end
end
if !correct_answers[1] #2nd question redemption
new_question(base_points_q2_redemption,"Which Pokémon is this fusion's head?", @head_id,true,false )
end
else
pbMessage("Wow! A perfect round! Let's see what this Pokémon looked like!")
end
hide_fusion_picture()
end
def new_question(points_value,question, answer_id, should_generate_new_choices, other_chance_later)
points_value=points_value.to_i
answer_name = getPokemon(answer_id).real_name
answered_correctly = give_answer(question,answer_id,should_generate_new_choices)
award_points(points_value) if answered_correctly
question_answer_followup_dialog(answered_correctly,answer_name,points_value,other_chance_later)
return answered_correctly
end
def award_points(nb_points)
@score += nb_points
end
def question_answer_followup_dialog(answered_correctly,correct_answer, points_awarded_if_win, other_chance_later=false)
if !other_chance_later
pbMessage("And the correct answer was...")
pbMessage("...")
pbMessage(_INTL("{1}!",correct_answer))
end
if answered_correctly
pbMessage("That's a correct answer!")
pbMessage(_INTL("You're awarded {1} points for your answer. Your current score is {2}",points_awarded_if_win,@score.to_s))
else
pbMessage("Unfortunately, that was a wong answer.")
pbMessage("But you'll get another chance!") if other_chance_later
end
end
def show_fusion_picture(obscured = false)
hide_fusion_picture()
picturePath = get_fusion_sprite_path(@head_id, @body_id)
bitmap = AnimatedBitmap.new(picturePath)
bitmap.scale_bitmap(Settings::FRONTSPRITE_SCALE)
@previewwindow = PictureWindow.new(bitmap)
@previewwindow.y = 30
@previewwindow.x = @difficulty==:ADVANCED ? 200 : 100
@previewwindow.z = 100000
if obscured
@previewwindow.picture.pbSetColor(255, 255, 255, 200)
end
end
def hide_fusion_picture()
@previewwindow.dispose if @previewwindow
end
def pick_random_pokemon(save_in_variable = 1)
random_pokemon = getRandomCustomFusionForIntro(true, @customs_list)
@head_id = random_pokemon[0]
@body_id = random_pokemon[1]
@selected_pokemon = getSpeciesIdForFusion(@head_id, @body_id)
pbSet(save_in_variable, @selected_pokemon)
end
def give_answer(prompt_message,answer_id,should_generate_new_choices)
question_answered=false
answer_pokemon_name = getPokemon(answer_id).real_name
while !question_answered
if @difficulty == :ADVANCED
player_answer = prompt_pick_answer_advanced(prompt_message,answer_id)
else
player_answer = prompt_pick_answer_regular(prompt_message,answer_id,should_generate_new_choices)
end
confirmed = pbMessage("Is this your final answer?",["Yes","No"])
if confirmed==0
question_answered=true
else
should_generate_new_choices=false
end
end
return player_answer == answer_pokemon_name
end
def get_random_pokemon_from_same_egg_group(pokemon,previous_choices)
egg_groups = getPokemonEggGroups(pokemon)
while true
new_pokemon = rand(1,NB_POKEMON)+1
new_pokemon_egg_groups = getPokemonEggGroups(new_pokemon)
if (egg_groups & new_pokemon_egg_groups).any? && !previous_choices.include?(new_pokemon)
return new_pokemon
end
end
end
def prompt_pick_answer_regular(prompt_message,real_answer,should_new_choices)
commands = should_new_choices ? generate_new_choices(real_answer) : @choices.shuffle
chosen = pbMessage(prompt_message,commands)
return commands[chosen]
end
def generate_new_choices(real_answer)
choices = []
choices << real_answer
choices << get_random_pokemon_from_same_egg_group(real_answer,choices)
choices << get_random_pokemon_from_same_egg_group(real_answer,choices)
choices << get_random_pokemon_from_same_egg_group(real_answer,choices)
commands = []
choices.each do |dex_num, i|
species = getPokemon(dex_num)
commands.push(species.real_name)
end
@choices = commands
return commands.shuffle
end
def prompt_pick_answer_advanced(prompt_message,answer)
commands = []
for dex_num in 1..NB_POKEMON
species = getPokemon(dex_num)
commands.push([dex_num-1, species.real_name, species.real_name])
end
pbMessage(prompt_message)
return pbChooseList(commands, 0, nil, 1)
end
def get_score
return @score
end
def player_abandonned
return @abandonned
end
def dispose
@previewwindow.dispose
end
end